My nixos configuration

Compare changes

Choose any two refs to compare.

Changed files
+5226 -7899
.github
checks
home
lib
mixed
nixos
npins
packages
parts
secrets
+1
.gitattributes
··· 1 + *.yaml diff=sopsdiffer
+170 -167
.github/workflows/flake-update.yml
··· 2 2 3 3 on: 4 4 schedule: 5 - - cron: '0 2 * * *' 5 + - cron: "0 2 * * *" 6 6 workflow_dispatch: {} 7 7 8 8 jobs: 9 9 generate_matrix: 10 - runs-on: ubuntu-20.04 10 + runs-on: ubuntu-24.04 11 11 outputs: 12 - packages: ${{ steps.gen_matrix.outputs.packages }} 13 - checks: ${{ steps.gen_matrix.outputs.checks }} 12 + packages: ${{ steps.gen_packages.outputs.packages }} 13 + checks: ${{ steps.gen_checks.outputs.checks }} 14 14 steps: 15 - - name: Clone repository 16 - uses: actions/checkout@v3 17 - with: 18 - token: '${{ secrets.GITHUB_TOKEN }}' 19 - - name: Install nix 20 - uses: cachix/install-nix-action@v16 21 - with: 22 - extra_nix_config: | 23 - auto-optimise-store = true 24 - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} 25 - experimental-features = nix-command flakes 26 - substituters = https://cache.nixos.org/ https://nix-community.cachix.org 27 - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 28 - install_url: https://releases.nixos.org/nix/nix-2.7.0/install 29 - - id: gen_matrix 30 - run: | 31 - flake="$(nix flake show --json)" 32 - packages=$(jq -c '.packages."x86_64-linux" | keys' <<< "$flake") 33 - checks=$(jq -c '.checks."x86_64-linux" | keys' <<< "$flake") 34 - jq <<< "$packages" 35 - jq <<< "$checks" 36 - printf "::set-output name=packages::%s" "$packages" 37 - printf "::set-output name=checks::%s" "$checks" 38 - 15 + - name: Clone repository 16 + uses: actions/checkout@v4 17 + with: 18 + token: "${{ secrets.TEST_TOKEN }}" 19 + - name: Install nix 20 + uses: cachix/install-nix-action@v31 21 + with: 22 + extra_nix_config: | 23 + auto-optimise-store = true 24 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 25 + experimental-features = nix-command flakes 26 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org 27 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 28 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 29 + - name: Generate flake.json 30 + run: | 31 + nix flake show --json > flake.json 32 + - id: gen_packages 33 + run: | 34 + packages=$(jq -c '.packages."x86_64-linux" | keys' < flake.json) 35 + printf "::set-output name=packages::%s" "$packages" 36 + - id: gen_checks 37 + run: | 38 + checks=$(jq -c '.checks."x86_64-linux" | keys' < flake.json) 39 + printf "::set-output name=checks::%s" "$checks" 40 + 39 41 update_flake: 40 - runs-on: ubuntu-20.04 42 + runs-on: ubuntu-24.04 41 43 steps: 42 - - name: Clone repository 43 - uses: actions/checkout@v3 44 - with: 45 - token: '${{ secrets.GITHUB_TOKEN }}' 46 - - name: Install nix 47 - uses: cachix/install-nix-action@v16 48 - with: 49 - extra_nix_config: | 50 - auto-optimise-store = true 51 - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} 52 - experimental-features = nix-command flakes 53 - substituters = https://cache.nixos.org/ https://nix-community.cachix.org 54 - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 55 - install_url: https://releases.nixos.org/nix/nix-2.7.0/install 56 - - name: Set up git 57 - run: | 58 - git config user.email gitbot@nobbz.dev 59 - git config user.name "Git Bot" 60 - - name: Update the flake 61 - run: nix flake update 62 - - name: Store flake.lock 63 - uses: actions/upload-artifact@v3 64 - with: 65 - name: flake_lock 66 - path: flake.lock 44 + - name: Clone repository 45 + uses: actions/checkout@v4 46 + with: 47 + token: "${{ secrets.TEST_TOKEN }}" 48 + - name: Install nix 49 + uses: cachix/install-nix-action@v31 50 + with: 51 + extra_nix_config: | 52 + auto-optimise-store = true 53 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 54 + experimental-features = nix-command flakes 55 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org 56 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 57 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 58 + - name: Set up git 59 + run: | 60 + git config user.email gitbot@nobbz.dev 61 + git config user.name "Git Bot" 62 + - name: Update the flake 63 + run: nix flake update 64 + - name: Store flake.lock 65 + uses: actions/upload-artifact@v4 66 + with: 67 + name: flake_lock 68 + path: flake.lock 67 69 68 70 build_flake: 69 - runs-on: ubuntu-20.04 71 + runs-on: ubuntu-24.04 70 72 needs: [generate_matrix, update_flake] 71 73 strategy: 72 74 fail-fast: false ··· 74 76 matrix: 75 77 package: ${{fromJson(needs.generate_matrix.outputs.packages)}} 76 78 steps: 77 - # - name: Prepare store folder 78 - # run: sudo mkdir -p /nix 79 - # - name: Free diskspace 80 - # uses: easimon/maximize-build-space@master 81 - # with: 82 - # build-mount-path: /nix 83 - # remove-dotnet: true 84 - # remove-android: true 85 - # remove-haskell: true 86 - - name: Clone repository 87 - uses: actions/checkout@v3 88 - with: 89 - token: '${{ secrets.GITHUB_TOKEN }}' 90 - - name: Install nix 91 - uses: cachix/install-nix-action@v16 92 - with: 93 - extra_nix_config: | 94 - auto-optimise-store = true 95 - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} 96 - experimental-features = nix-command flakes 97 - substituters = https://cache.nixos.org/ https://nix-community.cachix.org 98 - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 99 - install_url: https://releases.nixos.org/nix/nix-2.7.0/install 100 - - name: Set up cachix 101 - uses: cachix/cachix-action@master # pathsToPush, please update once we have v11! 102 - with: 103 - name: nobbz 104 - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' 105 - pathsToPush: result 106 - - name: Restore flake.lock 107 - uses: actions/download-artifact@v3 108 - with: 109 - name: flake_lock 110 - - name: Build everything 111 - run: nix build .#${{ matrix.package }} 79 + # - name: Prepare store folder 80 + # run: sudo mkdir -p /nix 81 + - name: Free diskspace 82 + uses: easimon/maximize-build-space@master 83 + with: 84 + build-mount-path: /nix 85 + root-reserve-mb: 5120 86 + remove-dotnet: true 87 + remove-android: true 88 + remove-haskell: true 89 + - name: Clone repository 90 + uses: actions/checkout@v4 91 + with: 92 + token: "${{ secrets.TEST_TOKEN }}" 93 + - name: Install nix 94 + uses: cachix/install-nix-action@v31 95 + with: 96 + extra_nix_config: | 97 + auto-optimise-store = true 98 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 99 + experimental-features = nix-command flakes 100 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org 101 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 102 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 103 + - name: Set up cachix 104 + uses: cachix/cachix-action@master # pathsToPush, please update once we have v11! 105 + with: 106 + name: nobbz 107 + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" 108 + pathsToPush: result 109 + - name: Restore flake.lock 110 + uses: actions/download-artifact@v4 111 + with: 112 + name: flake_lock 113 + - name: Build everything 114 + run: nix build .#${{ matrix.package }} 112 115 113 116 build_checks: 114 - runs-on: ubuntu-20.04 117 + runs-on: ubuntu-24.04 115 118 needs: [generate_matrix, update_flake] 116 119 strategy: 117 120 fail-fast: false ··· 119 122 matrix: 120 123 check: ${{fromJson(needs.generate_matrix.outputs.checks)}} 121 124 steps: 122 - - name: Clone repository 123 - uses: actions/checkout@v3 124 - with: 125 - token: '${{ secrets.GITHUB_TOKEN }}' 126 - - name: Install nix 127 - uses: cachix/install-nix-action@v16 128 - with: 129 - extra_nix_config: | 130 - auto-optimise-store = true 131 - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} 132 - experimental-features = nix-command flakes 133 - substituters = https://cache.nixos.org/ https://nix-community.cachix.org 134 - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 135 - install_url: https://releases.nixos.org/nix/nix-2.7.0/install 136 - - name: Set up cachix 137 - uses: cachix/cachix-action@master # pathsToPush, please update once we have v11! 138 - with: 139 - name: nobbz 140 - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' 141 - skipPush: true 142 - - name: Restore flake.lock 143 - uses: actions/download-artifact@v3 144 - with: 145 - name: flake_lock 146 - - name: Build everything 147 - run: nix build .#checks.${{ matrix.check }} --no-link 125 + - name: Clone repository 126 + uses: actions/checkout@v4 127 + with: 128 + token: "${{ secrets.TEST_TOKEN }}" 129 + - name: Install nix 130 + uses: cachix/install-nix-action@v31 131 + with: 132 + extra_nix_config: | 133 + auto-optimise-store = true 134 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 135 + experimental-features = nix-command flakes 136 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org 137 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 138 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 139 + - name: Set up cachix 140 + uses: cachix/cachix-action@master # pathsToPush, please update once we have v11! 141 + with: 142 + name: nobbz 143 + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" 144 + skipPush: true 145 + - name: Restore flake.lock 146 + uses: actions/download-artifact@v4 147 + with: 148 + name: flake_lock 149 + - name: Build everything 150 + run: nix build .#checks.x86_64-linux.${{ matrix.check }} --no-link 148 151 149 152 check_flake: 150 - runs-on: ubuntu-20.04 153 + runs-on: ubuntu-24.04 151 154 needs: [update_flake] 152 155 continue-on-error: true 153 156 steps: 154 - - name: Clone repository 155 - uses: actions/checkout@v3 156 - with: 157 - token: '${{ secrets.GITHUB_TOKEN }}' 158 - - name: Install nix 159 - uses: cachix/install-nix-action@v16 160 - with: 161 - extra_nix_config: | 162 - auto-optimise-store = true 163 - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} 164 - experimental-features = nix-command flakes 165 - substituters = https://cache.nixos.org/ https://nix-community.cachix.org 166 - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 167 - install_url: https://releases.nixos.org/nix/nix-2.7.0/install 168 - - name: Restore flake.lock 169 - uses: actions/download-artifact@v3 170 - with: 171 - name: flake_lock 172 - - name: Build everything 173 - run: | 174 - nix flake check --keep-going 157 + - name: Clone repository 158 + uses: actions/checkout@v4 159 + with: 160 + token: "${{ secrets.TEST_TOKEN }}" 161 + - name: Install nix 162 + uses: cachix/install-nix-action@v31 163 + with: 164 + extra_nix_config: | 165 + auto-optimise-store = true 166 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 167 + experimental-features = nix-command flakes 168 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org 169 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= 170 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 171 + - name: Restore flake.lock 172 + uses: actions/download-artifact@v4 173 + with: 174 + name: flake_lock 175 + - name: Build everything 176 + run: | 177 + nix flake check --keep-going 175 178 176 179 push_update: 177 - runs-on: ubuntu-20.04 180 + runs-on: ubuntu-24.04 178 181 permissions: write-all 179 182 needs: [update_flake, build_flake, build_checks, check_flake] 180 183 steps: 181 - - name: Clone repository 182 - uses: actions/checkout@v3 183 - with: 184 - token: '${{ secrets.GITHUB_TOKEN }}' 185 - - name: Restore flake.lock 186 - uses: actions/download-artifact@v3 187 - with: 188 - name: flake_lock 189 - - name: Set up git 190 - run: | 191 - git config user.email gitbot@nobbz.dev 192 - git config user.name "Git Bot" 193 - - name: Create and merge PR 194 - run: | 195 - git switch -c updates-${{ github.run_id }} 196 - git commit -am "flake.lock: Update" 197 - git push -u origin updates-${{ github.run_id }} 198 - PR=$(gh pr create \ 199 - --assignee NobbZ \ 200 - --base main \ 201 - --body "Automatic flake update on $(date -I)" \ 202 - --fill \ 203 - --label bot \ 204 - --title "Auto update $(date -I)") 205 - gh pr merge $PR --merge --delete-branch 206 - env: 207 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 184 + - name: Clone repository 185 + uses: actions/checkout@v4 186 + with: 187 + token: "${{ secrets.TEST_TOKEN }}" 188 + - name: Restore flake.lock 189 + uses: actions/download-artifact@v4 190 + with: 191 + name: flake_lock 192 + - name: Set up git 193 + run: | 194 + git config user.email gitbot@nobbz.dev 195 + git config user.name "Git Bot" 196 + - name: Create and merge PR 197 + run: | 198 + git switch -c updates-${{ github.run_id }} 199 + git commit -am "flake.lock: Update" 200 + git push -u origin updates-${{ github.run_id }} 201 + PR=$(gh pr create \ 202 + --assignee NobbZ \ 203 + --base main \ 204 + --body "Automatic flake update on $(date -I)" \ 205 + --fill \ 206 + --label bot \ 207 + --title "Auto update $(date -I)") 208 + gh pr merge $PR --merge --delete-branch 209 + env: 210 + GITHUB_TOKEN: ${{ secrets.TEST_TOKEN }}
+119
.github/workflows/pull-check.yml
··· 1 + name: PullRequest checker 2 + 3 + on: 4 + pull_request: 5 + 6 + jobs: 7 + generate_matrix: 8 + runs-on: ubuntu-24.04 9 + outputs: 10 + packages: ${{ steps.gen_packages.outputs.packages }} 11 + checks: ${{ steps.gen_checks.outputs.checks }} 12 + steps: 13 + - name: Clone repository 14 + uses: actions/checkout@v4 15 + with: 16 + token: "${{ secrets.TEST_TOKEN }}" 17 + - name: Install nix 18 + uses: cachix/install-nix-action@v31 19 + with: 20 + extra_nix_config: | 21 + auto-optimise-store = true 22 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 23 + experimental-features = nix-command flakes 24 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org https://nobbz.cachix.org 25 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= nobbz.cachix.org-1:fODxpqE4ni+pFDSuj2ybYZbMUjmxNTjA7rtUNHW61Ok= 26 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 27 + - name: Generate flake.json 28 + run: | 29 + nix flake show --json > flake.json 30 + - id: gen_packages 31 + run: | 32 + packages=$(jq -c '.packages."x86_64-linux" | keys' < flake.json) 33 + printf "packages=%s" "$packages" >> $GITHUB_OUTPUT 34 + - id: gen_checks 35 + run: | 36 + checks=$(jq -c '.checks."x86_64-linux" | keys' < flake.json) 37 + printf "checks=%s" "$checks" >> $GITHUB_OUTPUT 38 + 39 + build_flake: 40 + runs-on: ubuntu-24.04 41 + needs: [generate_matrix] 42 + strategy: 43 + fail-fast: false 44 + max-parallel: 5 45 + matrix: 46 + package: ${{fromJson(needs.generate_matrix.outputs.packages)}} 47 + steps: 48 + - name: Free diskspace 49 + uses: easimon/maximize-build-space@master 50 + with: 51 + build-mount-path: /nix 52 + root-reserve-mb: 5120 53 + remove-dotnet: true 54 + remove-android: true 55 + remove-haskell: true 56 + - name: Clone repository 57 + uses: actions/checkout@v4 58 + with: 59 + token: "${{ secrets.TEST_TOKEN }}" 60 + - name: Install nix 61 + uses: cachix/install-nix-action@v31 62 + with: 63 + extra_nix_config: | 64 + auto-optimise-store = true 65 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 66 + experimental-features = nix-command flakes 67 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org https://nobbz.cachix.org 68 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= nobbz.cachix.org-1:fODxpqE4ni+pFDSuj2ybYZbMUjmxNTjA7rtUNHW61Ok= 69 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 70 + - name: Build everything 71 + run: nix build .#${{ matrix.package }} 72 + 73 + build_checks: 74 + runs-on: ubuntu-24.04 75 + needs: [generate_matrix] 76 + strategy: 77 + fail-fast: false 78 + max-parallel: 5 79 + matrix: 80 + check: ${{fromJson(needs.generate_matrix.outputs.checks)}} 81 + steps: 82 + - name: Clone repository 83 + uses: actions/checkout@v4 84 + with: 85 + token: "${{ secrets.TEST_TOKEN }}" 86 + - name: Install nix 87 + uses: cachix/install-nix-action@v31 88 + with: 89 + extra_nix_config: | 90 + auto-optimise-store = true 91 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 92 + experimental-features = nix-command flakes 93 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org https://nobbz.cachix.org 94 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= nobbz.cachix.org-1:fODxpqE4ni+pFDSuj2ybYZbMUjmxNTjA7rtUNHW61Ok= 95 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 96 + - name: Build everything 97 + run: nix build .#checks.x86_64-linux.${{ matrix.check }} --no-link 98 + 99 + check_flake: 100 + runs-on: ubuntu-24.04 101 + continue-on-error: true 102 + steps: 103 + - name: Clone repository 104 + uses: actions/checkout@v4 105 + with: 106 + token: "${{ secrets.TEST_TOKEN }}" 107 + - name: Install nix 108 + uses: cachix/install-nix-action@v31 109 + with: 110 + extra_nix_config: | 111 + auto-optimise-store = true 112 + access-tokens = github.com=${{ secrets.TEST_TOKEN }} 113 + experimental-features = nix-command flakes 114 + substituters = https://cache.nixos.org/ https://nix-community.cachix.org https://nobbz.cachix.org 115 + trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs= nobbz.cachix.org-1:fODxpqE4ni+pFDSuj2ybYZbMUjmxNTjA7rtUNHW61Ok= 116 + install_url: https://releases.nixos.org/nix/nix-2.25.0/install 117 + - name: run the checks 118 + run: | 119 + nix flake check --keep-going
+32
.sops.yaml
··· 1 + keys: 2 + - &admin_nobbz age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r 3 + - &host_mimas age10jl78vwyqk622dpn2890l9jl4et3p7lsr8wh8vusem3j8jdxle8qg000qa 4 + - &user_nmelzer_mimas age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6 5 + - &user_nmelzer_phoebe age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna 6 + creation_rules: 7 + - path_regex: secrets/[^/]+\.yaml$ 8 + key_groups: 9 + - age: 10 + - *admin_nobbz 11 + - *host_mimas 12 + - path_regex: secrets/mimas/[^/]+\.yaml$ 13 + key_groups: 14 + - age: 15 + - *admin_nobbz 16 + - *host_mimas 17 + - path_regex: secrets/mimas/nmelzer/[^/]+\.yaml$ 18 + key_groups: 19 + - age: 20 + - *admin_nobbz 21 + - *user_nmelzer_mimas 22 + - path_regex: secrets/phoebe/nmelzer/[^/]+ 23 + key_groups: 24 + - age: 25 + - *admin_nobbz 26 + - *user_nmelzer_phoebe 27 + - path_regex: secrets/users/nmelzer/[^/]+$ 28 + key_groups: 29 + - age: 30 + - *admin_nobbz 31 + - *user_nmelzer_mimas 32 + - *user_nmelzer_phoebe
+25
README.md
··· 1 + Hosts 2 + ===== 3 + 4 + > [!CAUTION] 5 + > This hosts system and home configurations are public for your own learning and 6 + > research. They are not meant to be used with any hardware other than mine. 7 + > Trying to build and deploy them to other systems without appropriate changes 8 + > can render your machines unbootable and damage data. 9 + 10 + > [!NOTE] 11 + > I do not provide copy/pastable commands that would build/switch/install any 12 + > of these configurations because I mean what I wrote in the block before! 13 + 14 + A list of all hosts currently in use by me. this covers all the 15 + devices i can name on my behalf. Not all devices in this list are 16 + managed through nix or even run it. 17 + 18 + * `mimas`: My currently used main host. 19 + * ~~`enceladeus`~~: A secondary laptop, rarely used but still updated. 20 + * ~~`thetys`~~: A nixos VM solely used in the office for work related things, discontinued 21 + * ~~`dione`~~: company provided android phone, discontinued 22 + * `rhea`: self owned phone 23 + * ~~`titan`~~: MacOS VM to play and experiment with, discontinued 24 + * ~~`hyperion`~~: Linux-Aarch64 VM to play and experiment with, discontinued 25 + * `phoebe`: TuxedoOS (Ubuntu derivative) laptop, HM only.
+2 -2
checks/alejandra.nix
··· 1 1 { 2 - runCommandNoCC, 2 + runCommand, 3 3 alejandra, 4 4 self, 5 5 }: 6 - runCommandNoCC "alejandra-run-${self.rev or "00000000"}" {} '' 6 + runCommand "alejandra-run-${self.rev or "00000000"}" {} '' 7 7 ${alejandra}/bin/alejandra --check ${self} < /dev/null | tee $out 8 8 ''
+2 -4
checks/default.nix
··· 1 1 inputs: let 2 - pkgs = inputs.unstable.legacyPackages.x86_64-linux; 3 - apkgs = inputs.alejandra.packages.x86_64-linux; 4 - spkgs = inputs.statix.packages.x86_64-linux; 2 + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; 5 3 6 - callPackage = pkgs.lib.callPackageWith (pkgs // apkgs // spkgs // {inherit (inputs) self;}); 4 + callPackage = pkgs.lib.callPackageWith (pkgs // {inherit (inputs) self;}); 7 5 in { 8 6 alejandra = callPackage ./alejandra.nix {}; 9 7 statix = callPackage ./statix.nix {};
+3 -3
checks/statix.nix
··· 1 1 { 2 - runCommandNoCC, 2 + runCommand, 3 3 statix, 4 4 self, 5 5 }: 6 - runCommandNoCC "statix-run-${self.rev or "00000000"}" {} '' 6 + runCommand "statix-run-${self.rev or "00000000"}" {} '' 7 7 cd ${self} 8 - ${statix}/bin/statix check -i packages/nodePackages/node-env.nix | tee $out 8 + ${statix}/bin/statix check | tee $out 9 9 ''
+453 -192
flake.lock
··· 1 1 { 2 2 "nodes": { 3 - "alejandra": { 3 + "cargo2nix": { 4 4 "inputs": { 5 - "flakeCompat": "flakeCompat", 6 - "nixpkgs": "nixpkgs" 5 + "flake-compat": "flake-compat_3", 6 + "flake-utils": "flake-utils_3", 7 + "nixpkgs": [ 8 + "switcher", 9 + "nixpkgs" 10 + ], 11 + "rust-overlay": [ 12 + "switcher", 13 + "rust-overlay" 14 + ] 7 15 }, 8 16 "locked": { 9 - "lastModified": 1646937181, 10 - "narHash": "sha256-vkFKYnSmhPPXtc3AH7iRtqRRqxhj0o5WySqPT+klDWU=", 11 - "owner": "kamadorueda", 12 - "repo": "alejandra", 13 - "rev": "b75302002c94a158faebf5fca9e0d72f2ca59f4d", 17 + "lastModified": 1705129117, 18 + "narHash": "sha256-LgdDHibvimzYhxBK3kxCk2gAL7k4Hyigl5KI0X9cijA=", 19 + "owner": "cargo2nix", 20 + "repo": "cargo2nix", 21 + "rev": "ae19a9e1f8f0880c088ea155ab66cee1fa001f59", 14 22 "type": "github" 15 23 }, 16 24 "original": { 17 - "owner": "kamadorueda", 18 - "ref": "1.1.0", 19 - "repo": "alejandra", 25 + "owner": "cargo2nix", 26 + "repo": "cargo2nix", 20 27 "type": "github" 21 28 } 22 29 }, 23 30 "emacs": { 31 + "inputs": { 32 + "nixpkgs": [ 33 + "nixpkgs" 34 + ], 35 + "nixpkgs-stable": [ 36 + "nixpkgs" 37 + ] 38 + }, 24 39 "locked": { 25 - "lastModified": 1649097144, 26 - "narHash": "sha256-sZSwz+w8CEfdhHjS3sTMmqXvyhSQ4UVDsYUH9jwD2N8=", 40 + "lastModified": 1745745433, 41 + "narHash": "sha256-fpb9C7rV2XxWnmr7QAgb9ioh21a7lstZVOYuDnR2Dxc=", 27 42 "owner": "nix-community", 28 43 "repo": "emacs-overlay", 29 - "rev": "3ba65e6ffec27162f6f62b9b6b2944669c26a43e", 44 + "rev": "24a3e2b6b0dda50c1afaa3da730f156d0400e95a", 30 45 "type": "github" 31 46 }, 32 47 "original": { ··· 35 50 "type": "github" 36 51 } 37 52 }, 38 - "fenix": { 39 - "inputs": { 40 - "nixpkgs": [ 41 - "statix", 42 - "nixpkgs" 43 - ], 44 - "rust-analyzer-src": "rust-analyzer-src" 53 + "flake-compat": { 54 + "flake": false, 55 + "locked": { 56 + "lastModified": 1733328505, 57 + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 58 + "owner": "edolstra", 59 + "repo": "flake-compat", 60 + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 61 + "type": "github" 45 62 }, 63 + "original": { 64 + "owner": "edolstra", 65 + "repo": "flake-compat", 66 + "type": "github" 67 + } 68 + }, 69 + "flake-compat_2": { 70 + "flake": false, 46 71 "locked": { 47 - "lastModified": 1645251813, 48 - "narHash": "sha256-cQ66tGjnZclBCS3nD26mZ5fUH+3/HnysGffBiWXUSHk=", 49 - "owner": "nix-community", 50 - "repo": "fenix", 51 - "rev": "9892337b588c38ec59466a1c89befce464aae7f8", 72 + "lastModified": 1696426674, 73 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 74 + "owner": "edolstra", 75 + "repo": "flake-compat", 76 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 52 77 "type": "github" 53 78 }, 54 79 "original": { 55 - "owner": "nix-community", 56 - "repo": "fenix", 80 + "owner": "edolstra", 81 + "repo": "flake-compat", 82 + "type": "github" 83 + } 84 + }, 85 + "flake-compat_3": { 86 + "flake": false, 87 + "locked": { 88 + "lastModified": 1696426674, 89 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 90 + "owner": "edolstra", 91 + "repo": "flake-compat", 92 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 93 + "type": "github" 94 + }, 95 + "original": { 96 + "owner": "edolstra", 97 + "repo": "flake-compat", 57 98 "type": "github" 58 99 } 59 100 }, 60 101 "flake-utils": { 61 102 "locked": { 62 - "lastModified": 1648297722, 63 - "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", 103 + "lastModified": 1659877975, 104 + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", 105 + "owner": "numtide", 106 + "repo": "flake-utils", 107 + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", 108 + "type": "github" 109 + }, 110 + "original": { 111 + "owner": "numtide", 112 + "repo": "flake-utils", 113 + "type": "github" 114 + } 115 + }, 116 + "flake-utils_2": { 117 + "inputs": { 118 + "systems": "systems" 119 + }, 120 + "locked": { 121 + "lastModified": 1681202837, 122 + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 123 + "owner": "numtide", 124 + "repo": "flake-utils", 125 + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 126 + "type": "github" 127 + }, 128 + "original": { 64 129 "owner": "numtide", 65 130 "repo": "flake-utils", 66 - "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", 131 + "type": "github" 132 + } 133 + }, 134 + "flake-utils_3": { 135 + "inputs": { 136 + "systems": "systems_2" 137 + }, 138 + "locked": { 139 + "lastModified": 1694529238, 140 + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", 141 + "owner": "numtide", 142 + "repo": "flake-utils", 143 + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", 67 144 "type": "github" 68 145 }, 69 146 "original": { ··· 72 149 "type": "github" 73 150 } 74 151 }, 75 - "flakeCompat": { 76 - "flake": false, 152 + "gen-luarc": { 153 + "inputs": { 154 + "flake-parts": [ 155 + "nvim", 156 + "parts" 157 + ], 158 + "git-hooks": "git-hooks", 159 + "luvit-meta": "luvit-meta", 160 + "nixpkgs": [ 161 + "nvim", 162 + "nixpkgs" 163 + ] 164 + }, 165 + "locked": { 166 + "lastModified": 1724097937, 167 + "narHash": "sha256-Q4tgm8ZHAQUdvsNft86MqIbHQAm7OF7RT/wwYWXqSdY=", 168 + "owner": "mrcjkb", 169 + "repo": "nix-gen-luarc-json", 170 + "rev": "b36b69c4ded9f31b079523bc452e23458734cf00", 171 + "type": "github" 172 + }, 173 + "original": { 174 + "owner": "mrcjkb", 175 + "repo": "nix-gen-luarc-json", 176 + "type": "github" 177 + } 178 + }, 179 + "git-hooks": { 180 + "inputs": { 181 + "flake-compat": "flake-compat_2", 182 + "gitignore": "gitignore", 183 + "nixpkgs": [ 184 + "nvim", 185 + "gen-luarc", 186 + "nixpkgs" 187 + ], 188 + "nixpkgs-stable": "nixpkgs-stable" 189 + }, 190 + "locked": { 191 + "lastModified": 1723803910, 192 + "narHash": "sha256-yezvUuFiEnCFbGuwj/bQcqg7RykIEqudOy/RBrId0pc=", 193 + "owner": "cachix", 194 + "repo": "git-hooks.nix", 195 + "rev": "bfef0ada09e2c8ac55bbcd0831bd0c9d42e651ba", 196 + "type": "github" 197 + }, 198 + "original": { 199 + "owner": "cachix", 200 + "repo": "git-hooks.nix", 201 + "type": "github" 202 + } 203 + }, 204 + "git-hooks-nix": { 205 + "inputs": { 206 + "flake-compat": [ 207 + "nix" 208 + ], 209 + "gitignore": [ 210 + "nix" 211 + ], 212 + "nixpkgs": [ 213 + "nix", 214 + "nixpkgs" 215 + ], 216 + "nixpkgs-stable": [ 217 + "nix", 218 + "nixpkgs" 219 + ] 220 + }, 77 221 "locked": { 78 - "lastModified": 1641205782, 79 - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 80 - "owner": "edolstra", 81 - "repo": "flake-compat", 82 - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", 222 + "lastModified": 1734279981, 223 + "narHash": "sha256-NdaCraHPp8iYMWzdXAt5Nv6sA3MUzlCiGiR586TCwo0=", 224 + "owner": "cachix", 225 + "repo": "git-hooks.nix", 226 + "rev": "aa9f40c906904ebd83da78e7f328cd8aeaeae785", 83 227 "type": "github" 84 228 }, 85 229 "original": { 86 - "owner": "edolstra", 87 - "repo": "flake-compat", 230 + "owner": "cachix", 231 + "repo": "git-hooks.nix", 88 232 "type": "github" 89 233 } 90 234 }, 91 235 "gitignore": { 92 236 "inputs": { 93 237 "nixpkgs": [ 94 - "statix", 238 + "nvim", 239 + "gen-luarc", 240 + "git-hooks", 95 241 "nixpkgs" 96 242 ] 97 243 }, 98 244 "locked": { 99 - "lastModified": 1635165013, 100 - "narHash": "sha256-o/BdVjNwcB6jOmzZjOH703BesSkkS5O7ej3xhyO8hAY=", 245 + "lastModified": 1709087332, 246 + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 101 247 "owner": "hercules-ci", 102 248 "repo": "gitignore.nix", 103 - "rev": "5b9e0ff9d3b551234b4f3eb3983744fa354b17f1", 249 + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 104 250 "type": "github" 105 251 }, 106 252 "original": { ··· 112 258 "home-manager": { 113 259 "inputs": { 114 260 "nixpkgs": [ 115 - "unstable" 261 + "nixpkgs" 116 262 ] 117 263 }, 118 264 "locked": { 119 - "lastModified": 1649084009, 120 - "narHash": "sha256-jfU0rYnMbL8jMNH+o+BYGxsb7d+HrtbFYtG5/kbQDLc=", 265 + "lastModified": 1745802917, 266 + "narHash": "sha256-hI7BmIwKagCJlQdVgwxs1sLY2d8i97srcqT+OrhBDao=", 121 267 "owner": "nix-community", 122 268 "repo": "home-manager", 123 - "rev": "0382c5f75e9b4ffb0cdc75535c3e249019710a02", 269 + "rev": "9c46dc881c2afcb50ac9ae9f1c36b2a4ebba3c8a", 124 270 "type": "github" 125 271 }, 126 272 "original": { ··· 129 275 "type": "github" 130 276 } 131 277 }, 132 - "lowdown-src": { 278 + "luvit-meta": { 133 279 "flake": false, 134 280 "locked": { 135 - "lastModified": 1633514407, 136 - "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", 137 - "owner": "kristapsdz", 138 - "repo": "lowdown", 139 - "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", 281 + "lastModified": 1705776742, 282 + "narHash": "sha256-zAAptV/oLuLAAsa2zSB/6fxlElk4+jNZd/cPr9oxFig=", 283 + "owner": "Bilal2453", 284 + "repo": "luvit-meta", 285 + "rev": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60", 140 286 "type": "github" 141 287 }, 142 288 "original": { 143 - "owner": "kristapsdz", 144 - "repo": "lowdown", 289 + "owner": "Bilal2453", 290 + "repo": "luvit-meta", 145 291 "type": "github" 146 292 } 147 293 }, 148 - "master": { 294 + "nix": { 295 + "inputs": { 296 + "flake-compat": "flake-compat", 297 + "flake-parts": [ 298 + "parts" 299 + ], 300 + "git-hooks-nix": "git-hooks-nix", 301 + "nixpkgs": "nixpkgs", 302 + "nixpkgs-23-11": "nixpkgs-23-11", 303 + "nixpkgs-regression": "nixpkgs-regression" 304 + }, 149 305 "locked": { 150 - "lastModified": 1649125247, 151 - "narHash": "sha256-s0o2OEy096XtJCHteA+F2wYm/DZYoLNTJ1n6JI/F0LE=", 306 + "lastModified": 1745707371, 307 + "narHash": "sha256-G9ggkngtuee05QnPnZX9GRrACVtkXHKRQyABb9InZuw=", 152 308 "owner": "nixos", 153 - "repo": "nixpkgs", 154 - "rev": "ef5d2ce251e477252f15c1399ef49783151d20f7", 309 + "repo": "nix", 310 + "rev": "c81202b358419ffff5af93f2299dd819fdaaed60", 155 311 "type": "github" 156 312 }, 157 313 "original": { 158 314 "owner": "nixos", 159 - "ref": "master", 160 - "repo": "nixpkgs", 315 + "repo": "nix", 161 316 "type": "github" 162 317 } 163 318 }, 164 - "naersk": { 319 + "nix-gl": { 165 320 "inputs": { 321 + "flake-utils": "flake-utils", 166 322 "nixpkgs": [ 167 - "rnix-lsp", 168 323 "nixpkgs" 169 324 ] 170 325 }, 171 326 "locked": { 172 - "lastModified": 1639947939, 173 - "narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=", 327 + "lastModified": 1713543440, 328 + "narHash": "sha256-lnzZQYG0+EXl/6NkGpyIz+FEOc/DSEG57AP1VsdeNrM=", 174 329 "owner": "nix-community", 175 - "repo": "naersk", 176 - "rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653", 330 + "repo": "nixgl", 331 + "rev": "310f8e49a149e4c9ea52f1adf70cdc768ec53f8a", 177 332 "type": "github" 178 333 }, 179 334 "original": { 180 335 "owner": "nix-community", 181 - "repo": "naersk", 336 + "repo": "nixgl", 182 337 "type": "github" 183 338 } 184 339 }, 185 - "nix": { 340 + "nixos-vscode-server": { 186 341 "inputs": { 187 - "lowdown-src": "lowdown-src", 188 - "nixpkgs": "nixpkgs_2", 189 - "nixpkgs-regression": "nixpkgs-regression" 342 + "flake-utils": "flake-utils_2", 343 + "nixpkgs": [ 344 + "nixpkgs" 345 + ] 190 346 }, 191 347 "locked": { 192 - "lastModified": 1649083779, 193 - "narHash": "sha256-h2kkg633G5mUTp3n9CSyPA3tAZuVGu1/wYS3m4TSWEY=", 194 - "owner": "nixos", 195 - "repo": "nix", 196 - "rev": "a4a1de69dcc3c6e0c40a093d67b5f20568a5f31e", 348 + "lastModified": 1729422940, 349 + "narHash": "sha256-DlvJv33ml5UTKgu4b0HauOfFIoDx6QXtbqUF3vWeRCY=", 350 + "owner": "msteen", 351 + "repo": "nixos-vscode-server", 352 + "rev": "8b6db451de46ecf9b4ab3d01ef76e59957ff549f", 197 353 "type": "github" 198 354 }, 199 355 "original": { 200 - "owner": "nixos", 201 - "repo": "nix", 356 + "owner": "msteen", 357 + "repo": "nixos-vscode-server", 202 358 "type": "github" 203 359 } 204 360 }, 205 - "nixos-vscode-server": { 206 - "inputs": { 207 - "nixpkgs": "nixpkgs_3" 208 - }, 361 + "nixpkgs": { 209 362 "locked": { 210 - "lastModified": 1631782689, 211 - "narHash": "sha256-/E2kuaU7IPtF2Wf1wWazjWmhmKyfpr/7h6gXZ1UCVY0=", 212 - "owner": "mudrii", 213 - "repo": "nixos-vscode-ssh-fix", 214 - "rev": "b7886e9c046d52a1be8e907a8bdb182b60677acb", 363 + "lastModified": 1745391562, 364 + "narHash": "sha256-sPwcCYuiEopaafePqlG826tBhctuJsLx/mhKKM5Fmjo=", 365 + "owner": "NixOS", 366 + "repo": "nixpkgs", 367 + "rev": "8a2f738d9d1f1d986b5a4cd2fd2061a7127237d7", 215 368 "type": "github" 216 369 }, 217 370 "original": { 218 - "owner": "mudrii", 219 - "ref": "main", 220 - "repo": "nixos-vscode-ssh-fix", 371 + "owner": "NixOS", 372 + "ref": "nixos-unstable", 373 + "repo": "nixpkgs", 221 374 "type": "github" 222 375 } 223 376 }, 224 - "nixpkgs": { 377 + "nixpkgs-23-11": { 225 378 "locked": { 226 - "lastModified": 1646506091, 227 - "narHash": "sha256-sWNAJE2m+HOh1jtXlHcnhxsj6/sXrHgbqVNcVRlveK4=", 228 - "owner": "nixos", 379 + "lastModified": 1717159533, 380 + "narHash": "sha256-oamiKNfr2MS6yH64rUn99mIZjc45nGJlj9eGth/3Xuw=", 381 + "owner": "NixOS", 229 382 "repo": "nixpkgs", 230 - "rev": "3e644bd62489b516292c816f70bf0052c693b3c7", 383 + "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 231 384 "type": "github" 232 385 }, 233 386 "original": { 234 - "owner": "nixos", 235 - "ref": "nixpkgs-unstable", 387 + "owner": "NixOS", 236 388 "repo": "nixpkgs", 389 + "rev": "a62e6edd6d5e1fa0329b8653c801147986f8d446", 237 390 "type": "github" 238 391 } 239 392 }, 240 - "nixpkgs-2105": { 393 + "nixpkgs-emmy": { 241 394 "locked": { 242 - "lastModified": 1645296114, 243 - "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", 244 - "owner": "nixos", 395 + "lastModified": 1719675406, 396 + "narHash": "sha256-bZgaUZikDI7ZS1EY0jjZnbcO4vNeSRhIekb17FyUMf0=", 397 + "owner": "NixOS", 245 398 "repo": "nixpkgs", 246 - "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", 399 + "rev": "2feb215c297f2c9ae272336f55d54a962d71a9ff", 247 400 "type": "github" 248 401 }, 249 402 "original": { 250 - "owner": "nixos", 251 - "ref": "nixos-21.05", 403 + "owner": "NixOS", 404 + "ref": "pull/323401/head", 252 405 "repo": "nixpkgs", 253 406 "type": "github" 254 407 } 255 408 }, 256 - "nixpkgs-2111": { 409 + "nixpkgs-pre-rust": { 257 410 "locked": { 258 - "lastModified": 1649024309, 259 - "narHash": "sha256-AWbvj/NHZXVwAnHaVOFlxg7tcNerEKrKBmgGfztSHWM=", 411 + "lastModified": 1723634395, 412 + "narHash": "sha256-K1ohl/M/HWXqieqNtsF39FbWqtaNX/mUgulrqcOO1KU=", 260 413 "owner": "nixos", 261 414 "repo": "nixpkgs", 262 - "rev": "af0a9bc0e5341855518e9c1734d7ef913e5138b9", 415 + "rev": "57d0d4a8f3025e2b902d2b4403bcece26ad1ea74", 263 416 "type": "github" 264 417 }, 265 418 "original": { 266 419 "owner": "nixos", 267 - "ref": "nixos-21.11", 420 + "ref": "57d0d4a8f302", 268 421 "repo": "nixpkgs", 269 422 "type": "github" 270 423 } ··· 279 432 "type": "github" 280 433 }, 281 434 "original": { 282 - "id": "nixpkgs", 435 + "owner": "NixOS", 436 + "repo": "nixpkgs", 283 437 "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", 284 - "type": "indirect" 438 + "type": "github" 285 439 } 286 440 }, 287 - "nixpkgs_2": { 441 + "nixpkgs-stable": { 288 442 "locked": { 289 - "lastModified": 1632864508, 290 - "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", 443 + "lastModified": 1720386169, 444 + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", 291 445 "owner": "NixOS", 292 446 "repo": "nixpkgs", 293 - "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", 447 + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", 294 448 "type": "github" 295 449 }, 296 450 "original": { 297 - "id": "nixpkgs", 298 - "ref": "nixos-21.05-small", 299 - "type": "indirect" 451 + "owner": "NixOS", 452 + "ref": "nixos-24.05", 453 + "repo": "nixpkgs", 454 + "type": "github" 300 455 } 301 456 }, 302 - "nixpkgs_3": { 457 + "nixpkgs_2": { 303 458 "locked": { 304 - "lastModified": 1626395775, 305 - "narHash": "sha256-7Uo+4PIQGirfd7WfFuRuspLCyDT7eUn6pnJx/CL9UC8=", 459 + "lastModified": 1745526057, 460 + "narHash": "sha256-ITSpPDwvLBZBnPRS2bUcHY3gZSwis/uTe255QgMtTLA=", 306 461 "owner": "nixos", 307 462 "repo": "nixpkgs", 308 - "rev": "a165aeceda9f9741d15bc2488425daeb06c0707e", 463 + "rev": "f771eb401a46846c1aebd20552521b233dd7e18b", 309 464 "type": "github" 310 465 }, 311 466 "original": { 312 467 "owner": "nixos", 313 - "ref": "nixos-21.05", 468 + "ref": "nixos-unstable", 314 469 "repo": "nixpkgs", 315 470 "type": "github" 316 471 } 317 472 }, 318 - "nixpkgs_4": { 473 + "nixpkgs_3": { 319 474 "locked": { 320 - "lastModified": 1645013224, 321 - "narHash": "sha256-b7OEC8vwzJv3rsz9pwnTX2LQDkeOWz2DbKypkVvNHXc=", 322 - "owner": "nixos", 475 + "lastModified": 1744868846, 476 + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", 477 + "owner": "NixOS", 323 478 "repo": "nixpkgs", 324 - "rev": "b66b39216b1fef2d8c33cc7a5c72d8da80b79970", 479 + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", 325 480 "type": "github" 326 481 }, 327 482 "original": { 328 - "owner": "nixos", 483 + "owner": "NixOS", 329 484 "ref": "nixpkgs-unstable", 330 485 "repo": "nixpkgs", 331 486 "type": "github" 332 487 } 333 488 }, 334 - "pdfminer-fix": { 489 + "nixpkgs_4": { 335 490 "locked": { 336 - "lastModified": 1648056130, 337 - "narHash": "sha256-FPh2agFhdE19llpC3uOXr4s+i5U1ByrEzq2OuiTGqds=", 338 - "owner": "nixos", 491 + "lastModified": 1728538411, 492 + "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", 493 + "owner": "NixOS", 339 494 "repo": "nixpkgs", 340 - "rev": "e204e5c5761d3cfe846aa26a25853c0b55f1abb1", 495 + "rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221", 341 496 "type": "github" 342 497 }, 343 498 "original": { 344 - "owner": "nixos", 345 - "ref": "pull/165382/head", 499 + "owner": "NixOS", 500 + "ref": "nixpkgs-unstable", 346 501 "repo": "nixpkgs", 347 502 "type": "github" 348 503 } 349 504 }, 350 - "rnix-lsp": { 505 + "nvim": { 351 506 "inputs": { 352 - "naersk": "naersk", 507 + "gen-luarc": "gen-luarc", 353 508 "nixpkgs": [ 354 - "unstable" 509 + "nixpkgs" 510 + ], 511 + "nixpkgs-emmy": "nixpkgs-emmy", 512 + "parts": [ 513 + "parts" 514 + ], 515 + "wrapper-manager": "wrapper-manager" 516 + }, 517 + "locked": { 518 + "lastModified": 1745766071, 519 + "narHash": "sha256-udVsLF35zb9YSDP5mPeCVwgMhGDwuRYT9Uk4cVWYw8M=", 520 + "owner": "nobbz", 521 + "repo": "nobbz-vim", 522 + "rev": "36a897123ffd74b9b8c59ca4268ecbf1b8ca90b7", 523 + "type": "github" 524 + }, 525 + "original": { 526 + "owner": "nobbz", 527 + "repo": "nobbz-vim", 528 + "type": "github" 529 + } 530 + }, 531 + "parts": { 532 + "inputs": { 533 + "nixpkgs-lib": [ 534 + "nixpkgs" 535 + ] 536 + }, 537 + "locked": { 538 + "lastModified": 1743550720, 539 + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", 540 + "owner": "hercules-ci", 541 + "repo": "flake-parts", 542 + "rev": "c621e8422220273271f52058f618c94e405bb0f5", 543 + "type": "github" 544 + }, 545 + "original": { 546 + "owner": "hercules-ci", 547 + "repo": "flake-parts", 548 + "type": "github" 549 + } 550 + }, 551 + "programsdb": { 552 + "inputs": { 553 + "nixpkgs": [ 554 + "nixpkgs" 355 555 ], 356 556 "utils": "utils" 357 557 }, 358 558 "locked": { 359 - "lastModified": 1647240246, 360 - "narHash": "sha256-/MLdBWfFUN1C1eNVBYfaVAIcDiZKXpWEbzBC2pqVXj0=", 361 - "owner": "nix-community", 362 - "repo": "rnix-lsp", 363 - "rev": "4d1024ccfe1bc569811769d1ef52a2fc6c1d482d", 559 + "lastModified": 1745780590, 560 + "narHash": "sha256-js+FPQVsH6KdxguYukxtA3pZu0pWK9rrFYjaI51ispo=", 561 + "owner": "wamserma", 562 + "repo": "flake-programs-sqlite", 563 + "rev": "ae9ef77cdcdbc173cd8f4d0c3f162acdefc77d25", 364 564 "type": "github" 365 565 }, 366 566 "original": { 367 - "owner": "nix-community", 368 - "ref": "master", 369 - "repo": "rnix-lsp", 567 + "owner": "wamserma", 568 + "repo": "flake-programs-sqlite", 370 569 "type": "github" 371 570 } 372 571 }, 373 572 "root": { 374 573 "inputs": { 375 - "alejandra": "alejandra", 376 574 "emacs": "emacs", 377 - "flake-utils": "flake-utils", 378 575 "home-manager": "home-manager", 379 - "master": "master", 380 576 "nix": "nix", 577 + "nix-gl": "nix-gl", 381 578 "nixos-vscode-server": "nixos-vscode-server", 382 - "nixpkgs-2105": "nixpkgs-2105", 383 - "nixpkgs-2111": "nixpkgs-2111", 384 - "pdfminer-fix": "pdfminer-fix", 385 - "rnix-lsp": "rnix-lsp", 386 - "statix": "statix", 387 - "unstable": "unstable" 579 + "nixpkgs": "nixpkgs_2", 580 + "nixpkgs-insync-v3": [ 581 + "nixpkgs" 582 + ], 583 + "nixpkgs-pre-rust": "nixpkgs-pre-rust", 584 + "nvim": "nvim", 585 + "parts": "parts", 586 + "programsdb": "programsdb", 587 + "sops-nix": "sops-nix", 588 + "switcher": "switcher" 589 + } 590 + }, 591 + "rust-overlay": { 592 + "inputs": { 593 + "nixpkgs": "nixpkgs_4" 594 + }, 595 + "locked": { 596 + "lastModified": 1734402816, 597 + "narHash": "sha256-cgQ8mjUJz7J3fp97lnvl0dSJ6vLt8yzUSmw3B7QKw94=", 598 + "owner": "oxalica", 599 + "repo": "rust-overlay", 600 + "rev": "e38fbd6e56e8cd1d61c65a21bbb7785e966707b4", 601 + "type": "github" 602 + }, 603 + "original": { 604 + "owner": "oxalica", 605 + "repo": "rust-overlay", 606 + "type": "github" 388 607 } 389 608 }, 390 - "rust-analyzer-src": { 391 - "flake": false, 609 + "sops-nix": { 610 + "inputs": { 611 + "nixpkgs": "nixpkgs_3" 612 + }, 392 613 "locked": { 393 - "lastModified": 1645205556, 394 - "narHash": "sha256-e4lZW3qRyOEJ+vLKFQP7m2Dxh5P44NrnekZYLxlucww=", 395 - "owner": "rust-analyzer", 396 - "repo": "rust-analyzer", 397 - "rev": "acf5874b39f3dc5262317a6074d9fc7285081161", 614 + "lastModified": 1745310711, 615 + "narHash": "sha256-ePyTpKEJTgX0gvgNQWd7tQYQ3glIkbqcW778RpHlqgA=", 616 + "owner": "Mic92", 617 + "repo": "sops-nix", 618 + "rev": "5e3e92b16d6fdf9923425a8d4df7496b2434f39c", 398 619 "type": "github" 399 620 }, 400 621 "original": { 401 - "owner": "rust-analyzer", 402 - "ref": "nightly", 403 - "repo": "rust-analyzer", 622 + "owner": "Mic92", 623 + "repo": "sops-nix", 404 624 "type": "github" 405 625 } 406 626 }, 407 - "statix": { 627 + "switcher": { 408 628 "inputs": { 409 - "fenix": "fenix", 410 - "gitignore": "gitignore", 411 - "nixpkgs": "nixpkgs_4" 629 + "cargo2nix": "cargo2nix", 630 + "flake-parts": [ 631 + "parts" 632 + ], 633 + "nixpkgs": [ 634 + "nixpkgs" 635 + ], 636 + "rust-overlay": "rust-overlay" 412 637 }, 413 638 "locked": { 414 - "lastModified": 1645337357, 415 - "narHash": "sha256-tAhWlvSh2ANWckdxYbNiYNk67dc3VliintqA2pwmsck=", 416 - "owner": "nerdypepper", 417 - "repo": "statix", 418 - "rev": "448e6f2096b855bee1464c514dfb73477fb39774", 639 + "lastModified": 1734435961, 640 + "narHash": "sha256-HIw4Naoc0Gcl9VOT4JkagzKDvAdBwyzlq2majy5pSks=", 641 + "owner": "nobbz", 642 + "repo": "nix-switcher", 643 + "rev": "6f12e77ff6b46d53a5e58567803f94708e15660e", 419 644 "type": "github" 420 645 }, 421 646 "original": { 422 - "owner": "nerdypepper", 423 - "repo": "statix", 647 + "owner": "nobbz", 648 + "ref": "main", 649 + "repo": "nix-switcher", 424 650 "type": "github" 425 651 } 426 652 }, 427 - "unstable": { 653 + "systems": { 428 654 "locked": { 429 - "lastModified": 1649012074, 430 - "narHash": "sha256-vQUROcJ3FfT3GTB/nJrXwVvjuq8WfK0ImN+RUgDVN1c=", 431 - "owner": "nixos", 432 - "repo": "nixpkgs", 433 - "rev": "bc4b9eef3ce3d5a90d8693e8367c9cbfc9fc1e13", 655 + "lastModified": 1681028828, 656 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 657 + "owner": "nix-systems", 658 + "repo": "default", 659 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 434 660 "type": "github" 435 661 }, 436 662 "original": { 437 - "owner": "nixos", 438 - "ref": "nixos-unstable", 439 - "repo": "nixpkgs", 663 + "owner": "nix-systems", 664 + "repo": "default", 665 + "type": "github" 666 + } 667 + }, 668 + "systems_2": { 669 + "locked": { 670 + "lastModified": 1681028828, 671 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 672 + "owner": "nix-systems", 673 + "repo": "default", 674 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 675 + "type": "github" 676 + }, 677 + "original": { 678 + "owner": "nix-systems", 679 + "repo": "default", 440 680 "type": "github" 441 681 } 442 682 }, 443 683 "utils": { 444 684 "locked": { 445 - "lastModified": 1638122382, 446 - "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", 685 + "lastModified": 1678901627, 686 + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", 447 687 "owner": "numtide", 448 688 "repo": "flake-utils", 449 - "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", 689 + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", 450 690 "type": "github" 451 691 }, 452 692 "original": { 453 693 "owner": "numtide", 454 694 "repo": "flake-utils", 695 + "type": "github" 696 + } 697 + }, 698 + "wrapper-manager": { 699 + "inputs": { 700 + "nixpkgs": [ 701 + "nvim", 702 + "nixpkgs" 703 + ] 704 + }, 705 + "locked": { 706 + "lastModified": 1744357296, 707 + "narHash": "sha256-82ByXqDDdVcDYO3yE6Ntj/pcNtJ3bBDzu7oVDp/OPWg=", 708 + "owner": "viperml", 709 + "repo": "wrapper-manager", 710 + "rev": "8ebdb81ed03aa26e4c797af9c3e05f467c1f29ca", 711 + "type": "github" 712 + }, 713 + "original": { 714 + "owner": "viperml", 715 + "repo": "wrapper-manager", 455 716 "type": "github" 456 717 } 457 718 }
+56 -45
flake.nix
··· 1 1 { 2 - inputs.nixpkgs-2105.url = "github:nixos/nixpkgs/nixos-21.05"; 3 - inputs.nixpkgs-2111.url = "github:nixos/nixpkgs/nixos-21.11"; 4 - inputs.unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 5 - inputs.master.url = "github:nixos/nixpkgs/master"; 2 + outputs = {parts, ...} @ inputs: 3 + parts.lib.mkFlake {inherit inputs;} { 4 + systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin"]; 5 + 6 + _module.args.npins = import ./npins; 6 7 7 - # See https://github.com/NixOS/nixpkgs/pull/165382 8 - inputs.pdfminer-fix.url = "github:nixos/nixpkgs/pull/165382/head"; 8 + imports = [ 9 + ./parts/auxiliary.nix 10 + ./parts/home_configs.nix 11 + ./parts/home_modules.nix 12 + ./parts/nixos_modules.nix 13 + ./parts/system_configs.nix 14 + 15 + ./nixos/configurations 16 + ./home/configurations 17 + 18 + ./home/modules 19 + ./nixos/modules 20 + 21 + ./packages 22 + ]; 23 + 24 + flake = { 25 + mixedModules = import ./mixed inputs; 9 26 10 - inputs.nix.url = "github:nixos/nix"; #/caf51729450d4c57d48ddbef8e855e9bf65f8792"; 11 - inputs.rnix-lsp.url = "github:nix-community/rnix-lsp/master"; 12 - inputs.rnix-lsp.inputs.nixpkgs.follows = "unstable"; 13 - # inputs.rnix-lsp.inputs.naersk.inputs.nixpkgs.follows = "unstable"; 27 + checks.x86_64-linux = import ./checks inputs; 28 + }; 29 + }; 14 30 15 - inputs.home-manager.url = "github:nix-community/home-manager"; 16 - inputs.home-manager.inputs.nixpkgs.follows = "unstable"; 31 + inputs = { 32 + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; 33 + # nixpkgs-insync-v3.url = "github:nixos/nixpkgs?ref=32fdc268e921994e3f38088486ddfe765d11df93"; 34 + nixpkgs-insync-v3.follows = "nixpkgs"; 35 + nixpkgs-pre-rust.url = "github:nixos/nixpkgs?ref=57d0d4a8f302"; 17 36 18 - inputs.flake-utils.url = "github:numtide/flake-utils"; 37 + nvim.url = "github:nobbz/nobbz-vim"; 38 + nvim.inputs.parts.follows = "parts"; 39 + nvim.inputs.nixpkgs.follows = "nixpkgs"; 19 40 20 - inputs.emacs.url = "github:nix-community/emacs-overlay"; 21 - inputs.emacs.inputs.nixpkgs.follows = "master"; 41 + switcher.url = "github:nobbz/nix-switcher?ref=main"; 42 + switcher.inputs.nixpkgs.follows = "nixpkgs"; 43 + switcher.inputs.flake-parts.follows = "parts"; 22 44 23 - inputs.nixos-vscode-server.url = "github:mudrii/nixos-vscode-ssh-fix/main"; 45 + parts.url = "github:hercules-ci/flake-parts"; 46 + parts.inputs.nixpkgs-lib.follows = "nixpkgs"; 24 47 25 - inputs.statix.url = "github:nerdypepper/statix"; 26 - inputs.alejandra.url = "github:kamadorueda/alejandra/1.1.0"; 48 + programsdb.url = "github:wamserma/flake-programs-sqlite"; 49 + programsdb.inputs.nixpkgs.follows = "nixpkgs"; 27 50 28 - outputs = {self, ...} @ inputs: { 29 - nixosModules = import ./nixos/modules inputs; 30 - nixosConfigurations = import ./nixos/configurations inputs; 51 + nix.url = "github:nixos/nix"; 52 + nix.inputs.flake-parts.follows = "parts"; 53 + # a libgit2 in the current version fails to build with the nix provided patches. 54 + # therefore using upstreams pin for now. 55 + # nix.inputs.nixpkgs.follows = "nixpkgs"; 31 56 32 - homeModules = import ./home/modules inputs; 33 - homeConfigurations = import ./home/configurations inputs; 57 + nix-gl.url = "github:nix-community/nixgl"; 58 + nix-gl.inputs.nixpkgs.follows = "nixpkgs"; 34 59 35 - packages.x86_64-linux = 36 - (import ./packages inputs) 37 - // self.lib.nixosConfigurationsAsPackages.x86_64-linux 38 - // self.lib.homeConfigurationsAsPackages.x86_64-linux; 60 + home-manager.url = "github:nix-community/home-manager"; 61 + home-manager.inputs.nixpkgs.follows = "nixpkgs"; 39 62 40 - checks.x86_64-linux = import ./checks inputs; 63 + emacs.url = "github:nix-community/emacs-overlay"; 64 + emacs.inputs.nixpkgs.follows = "nixpkgs"; 65 + emacs.inputs.nixpkgs-stable.follows = "nixpkgs"; 41 66 42 - lib = import ./lib inputs; 67 + nixos-vscode-server.url = "github:msteen/nixos-vscode-server"; 68 + nixos-vscode-server.inputs.nixpkgs.follows = "nixpkgs"; 43 69 44 - devShell.x86_64-linux = self.devShells.x86_64-linux.default; 45 - devShells.x86_64-linux.default = let 46 - pkgs = inputs.unstable.legacyPackages.x86_64-linux; 47 - in 48 - pkgs.mkShell { 49 - packages = [ 50 - self.packages.x86_64-linux.rnix-lsp 51 - self.packages.x86_64-linux.statix 52 - self.packages.x86_64-linux.alejandra 53 - pkgs.rust-analyzer 54 - pkgs.rustc 55 - pkgs.cargo 56 - pkgs.rustfmt 57 - pkgs.clippy 58 - ]; 59 - }; 70 + sops-nix.url = "github:Mic92/sops-nix"; 60 71 }; 61 72 }
+3 -4
home/configurations/default.nix
··· 1 - {self, ...} @ inputs: { 2 - "nmelzer@mimas" = self.lib.mkHome "nmelzer" "mimas" "x86_64-linux" inputs.unstable; 3 - "nmelzer@enceladeus" = self.lib.mkHome "nmelzer" "enceladeus" "x86_64-linux" inputs.unstable; 4 - "demo@thetys" = self.lib.mkHome "demo" "thetys" "x86_64-linux" inputs.unstable; 1 + _: { 2 + nobbz.homeConfigurations."nmelzer@mimas".system = "x86_64-linux"; 3 + nobbz.homeConfigurations."nmelzer@phoebe".system = "x86_64-linux"; 5 4 }
-97
home/configurations/demo@thetys.nix
··· 1 - { 2 - self, 3 - nixpkgs-2105, 4 - ... 5 - }: {pkgs, ...}: let 6 - stable = nixpkgs-2105.legacyPackages.x86_64-linux; 7 - self' = self.packages.x86_64-linux; 8 - in { 9 - config = { 10 - nixpkgs.allowedUnfree = ["google-chrome" "vscode"]; 11 - 12 - activeProfiles = ["browsing" "development"]; 13 - 14 - enabledLanguages = ["elixir" "go" "lua" "nix" "python" "terraform" "nim" "rust"]; 15 - 16 - languages.python.useMS = true; 17 - 18 - programs.emacs.splashScreen = false; 19 - programs.emacs.extraPackages = ep: [ep.robot-mode]; 20 - 21 - services = { 22 - gnome-keyring.enable = true; 23 - 24 - restic = { 25 - enable = true; 26 - exclude = 27 - (map 28 - (e: "%h/${e}") 29 - [ 30 - ".cache" 31 - ".cabal" 32 - ".cargo" 33 - ".emacs.d/eln-cache" 34 - ".emacs.d/.cache" 35 - ".gem" 36 - ".gradle" 37 - ".hex" 38 - ".kube" 39 - ".local" 40 - ".m2" 41 - ".minikube" 42 - ".minishift" 43 - ".mix" 44 - ".mozilla" 45 - ".npm" 46 - ".opam" 47 - ".rancher" 48 - ".vscode-oss" 49 - "go/pkg" 50 - "Videos" 51 - "Downloads" 52 - "VirtualBox VMs" 53 - ]) 54 - ++ [ 55 - "_build" 56 - "deps" 57 - "result" 58 - "target" 59 - ".elixir_ls" 60 - "ccls-cache" 61 - ".direnv" 62 - ]; 63 - repo = "rest:http://172.24.152.168:9999/nobbz"; 64 - }; 65 - }; 66 - 67 - home.packages = [ 68 - stable.mysqlWorkbench 69 - self'.gnucash-de 70 - pkgs.vscode 71 - ]; 72 - 73 - systemd.user.services = { 74 - imwheel = { 75 - Unit = { 76 - Description = "IMWheel"; 77 - Wants = ["display-manager.service"]; 78 - After = ["display-manager.service"]; 79 - }; 80 - 81 - Service = { 82 - Type = "simple"; 83 - Environment = ["XAUTHORITY=%h/.Xauthority"]; 84 - ExecStart = "${pkgs.imwheel}/bin/imwheel -d"; 85 - ExecStop = "${pkgs.procps}/bin/pkill imwheel"; 86 - 87 - Restart = "on-failure"; 88 - RestartSec = "10"; 89 - }; 90 - 91 - Install = { 92 - WantedBy = ["graphical-session.target"]; 93 - }; 94 - }; 95 - }; 96 - }; 97 - }
-34
home/configurations/nmelzer@enceladeus.nix
··· 1 - {statix, ...}: { 2 - pkgs, 3 - lib, 4 - ... 5 - }: { 6 - config = { 7 - nixpkgs.allowedUnfree = ["google-chrome" "vscode"]; 8 - 9 - nixpkgs.config.contentAddressedByDefault = false; 10 - 11 - activeProfiles = ["browsing" "development"]; # "home-office" ]; 12 - 13 - xsession.windowManager.awesome.autostart = [ 14 - "${pkgs.blueman}/bin/blueman-applet" 15 - "${pkgs.networkmanagerapplet}/bin/nm-applet" 16 - ]; 17 - 18 - enabledLanguages = ["cpp" "nix" "elixir" "erlang" "python"]; 19 - 20 - languages.python.useMS = true; 21 - 22 - programs.emacs.splashScreen = false; 23 - 24 - services.restic = { 25 - enable = true; 26 - exclude = (map (e: "%h/${e}") [".cache" ".cabal" ".cargo" ".emacs.d/eln-cache" ".emacs.d/.cache" ".gem" ".gradle" ".hex" ".kube" ".local" ".m2" ".minikube" ".minishift" ".mix" ".mozilla" "npm" ".opam" ".rancher" ".vscode-oss" "go/pkg"]) ++ ["_build" "deps" "result" "target" ".elixir_ls" "ccls-cache" ".direnv"]; 27 - oneFileSystem = true; 28 - repo = "rest:http://172.24.152.168:9999/nobbz"; 29 - }; 30 - systemd.user.timers.restic-backup.Timer.OnCalendar = lib.mkForce "hourly"; 31 - 32 - home.packages = [pkgs.vscode statix.defaultPackage.x86_64-linux]; 33 - }; 34 - }
-102
home/configurations/nmelzer@mimas.nix
··· 1 - { 2 - unstable, 3 - self, 4 - ... 5 - }: {pkgs, ...}: let 6 - keepassWithPlugins = 7 - pkgs.keepass.override {plugins = [pkgs.keepass-keepasshttp];}; 8 - in { 9 - config = { 10 - nixpkgs.allowedUnfree = ["teamspeak-client" "google-chrome" "vscode" "teams"]; 11 - 12 - activeProfiles = ["browsing" "development" "home-office"]; 13 - 14 - dconf.enable = true; 15 - 16 - enabledLanguages = [ 17 - # "agda" # Seems as if AGDA2-mode isn't on melpa anymore 18 - "clojure" 19 - "cpp" 20 - "elixir" 21 - "erlang" 22 - "go" 23 - "nim" 24 - "nix" 25 - # "ocaml" 26 - "python" 27 - "rust" 28 - "tex" 29 - ]; 30 - 31 - languages.python.useMS = true; 32 - 33 - programs.emacs.splashScreen = false; 34 - 35 - home.packages = let 36 - p = pkgs; 37 - s = self.packages.x86_64-linux; 38 - in [ 39 - p.handbrake 40 - p.keybase-gui 41 - p.minikube 42 - p.gnome3.gnome-tweaks 43 - p.freerdp 44 - p.vscode 45 - p.teams 46 - 47 - s.gnucash-de 48 - 49 - keepassWithPlugins 50 - ]; 51 - 52 - programs.obs-studio.enable = true; 53 - programs.htop = { 54 - settings = { 55 - detailed_cpu_time = true; 56 - }; 57 - # meters.right = [ 58 - # { kind = "Battery"; mode = 1; } 59 - # "Tasks" 60 - # "LoadAverage" 61 - # "Uptime" 62 - # ]; 63 - }; 64 - 65 - xsession.windowManager.awesome.autostart = [ 66 - "${pkgs.blueman}/bin/blueman-applet" 67 - "${pkgs.networkmanagerapplet}/bin/nm-applet" 68 - ]; 69 - 70 - services = { 71 - keyleds.enable = true; 72 - keybase.enable = true; 73 - kbfs.enable = true; 74 - insync.enable = true; 75 - 76 - restic = { 77 - enable = true; 78 - exclude = (map (e: "%h/${e}") [".cache" ".cabal" ".cargo" ".emacs.d/eln-cache" ".emacs.d/.cache" ".gem" ".gradle" ".hex" ".kube" ".local" ".m2" ".minikube" ".minishift" ".mix" ".mozilla" "npm" ".opam" ".rancher" ".vscode-oss" "go/pkg"]) ++ ["_build" "deps" "result" "target" ".elixir_ls" "ccls-cache" ".direnv"]; 79 - oneFileSystem = true; 80 - repo = "rest:http://172.24.152.168:9999/nobbz"; 81 - }; 82 - }; 83 - 84 - systemd.user.services = { 85 - keybase-gui = { 86 - Unit = { 87 - Description = "Keybase GUI"; 88 - Requires = ["keybase.service" "kbfs.service"]; 89 - After = ["keybase.service" "kbfs.service"]; 90 - }; 91 - Service = { 92 - ExecStart = "${pkgs.keybase-gui}/share/keybase/Keybase"; 93 - PrivateTmp = true; 94 - # Slice = "keybase.slice"; 95 - }; 96 - }; 97 - }; 98 - }; 99 - # environment.pathsToLink = [ "/share/zsh" ]; 100 - } 101 - # /nix/store/7skqa8vxfydq7w3cix55ffvkmjb3b5da-python-2.7.18 102 -
+130
home/configurations/nmelzer_at_mimas.nix
··· 1 + {self, ...}: { 2 + config, 3 + pkgs, 4 + lib, 5 + ... 6 + }: { 7 + nixpkgs.allowedUnfree = ["google-chrome" "vscode" "discord" "obsidian"]; 8 + 9 + activeProfiles = ["browsing" "development"]; 10 + 11 + sops.age.sshKeyPaths = ["${config.home.homeDirectory}/.ssh/id_ed25519"]; 12 + sops.defaultSopsFile = "${self}/secrets/mimas/nmelzer/default.yaml"; 13 + 14 + sops.secrets.rustic.path = "${config.xdg.configHome}/rustic/password"; 15 + 16 + dconf.enable = true; 17 + 18 + home.packages = builtins.attrValues { 19 + inherit (pkgs) keybase-gui freerdp keepassxc nix-output-monitor discord; 20 + inherit (pkgs) obsidian; 21 + inherit (pkgs) gnome-tweaks; 22 + inherit (pkgs) vscode wezterm; 23 + }; 24 + 25 + programs.obs-studio.enable = true; 26 + programs.obs-studio.plugins = builtins.attrValues { 27 + inherit (pkgs.obs-studio-plugins) obs-backgroundremoval; 28 + }; 29 + programs.htop = { 30 + settings = { 31 + detailed_cpu_time = true; 32 + }; 33 + # meters.right = [ 34 + # { kind = "Battery"; mode = 1; } 35 + # "Tasks" 36 + # "LoadAverage" 37 + # "Uptime" 38 + # ]; 39 + }; 40 + 41 + programs.yazi.enable = true; 42 + 43 + xsession.windowManager.awesome.autostart = [ 44 + "${pkgs.blueman}/bin/blueman-applet" 45 + "${pkgs.networkmanagerapplet}/bin/nm-applet" 46 + ]; 47 + 48 + systemd.user.tmpfiles.rules = [ 49 + "d ${config.home.homeDirectory}/tmp 700 ${config.home.username} users 14d" 50 + ]; 51 + 52 + services = { 53 + keybase.enable = true; 54 + kbfs.enable = true; 55 + insync.enable = true; 56 + playerctld.enable = true; 57 + flameshot.enable = true; 58 + 59 + rustic = { 60 + enable = true; 61 + passwordFile = config.sops.secrets.rustic.path; 62 + globs = let 63 + mkHome = e: "${config.home.homeDirectory}/${e}"; 64 + mkIgnore = e: "!${e}"; 65 + 66 + home = map mkHome ["Downloads" ".cache" ".cabal" ".cargo" ".emacs.d/eln-cache" ".emacs.d/.cache" ".gem" ".gradle" ".hex" ".kube" ".local" ".m2" ".minikube" ".minishift" ".mix" ".mozilla" "npm" ".opam" ".rancher" ".vscode-oss" "go/pkg" "timmelzer@gmail.com/restic_repos" ".local/share/libvirt" ".bitmonero"]; 67 + patterns = ["_build" "Cache" "deps" "result" "target" ".elixir_ls" "ccls-cache" ".direnv" "direnv" "node_modules"]; 68 + in 69 + map mkIgnore (home ++ patterns); 70 + oneFileSystem = true; 71 + repo = "rest:https://restic.mimas.internal.nobbz.dev/nobbz"; 72 + }; 73 + }; 74 + 75 + systemd.user.services = { 76 + rustic.Unit.After = ["sops-nix.service"]; 77 + keybase-gui = { 78 + Unit = { 79 + Description = "Keybase GUI"; 80 + Requires = ["keybase.service" "kbfs.service"]; 81 + After = ["keybase.service" "kbfs.service"]; 82 + }; 83 + Service = { 84 + ExecStart = "${pkgs.keybase-gui}/share/keybase/Keybase"; 85 + PrivateTmp = true; 86 + # Slice = "keybase.slice"; 87 + }; 88 + }; 89 + }; 90 + 91 + xdg.configFile = { 92 + "rustic/mimas-hetzner.toml".text = 93 + # toml 94 + '' 95 + [repository] 96 + repository = "rclone:hetzner-restic:mimas" 97 + password-file = "${config.sops.secrets.rustic.path}" 98 + ''; 99 + "rustic/mimas.toml".text = 100 + # toml 101 + '' 102 + [repository] 103 + repository = "rest:https://restic.mimas.internal.nobbz.dev/mimas" 104 + password-file = "${config.sops.secrets.rustic.path}" 105 + 106 + [copy] 107 + targets = ["mimas-hetzner"] 108 + ''; 109 + 110 + "rustic/nobbz-hetzner.toml".text = 111 + # toml 112 + '' 113 + [repository] 114 + repository = "rclone:hetzner-restic:nobbz" 115 + password-file = "${config.sops.secrets.rustic.path}" 116 + ''; 117 + "rustic/nobbz.toml".text = 118 + # toml 119 + '' 120 + [repository] 121 + repository = "rest:https://restic.mimas.internal.nobbz.dev/nobbz" 122 + password-file = "${config.sops.secrets.rustic.path}" 123 + 124 + [copy] 125 + targets = ["nobbz-hetzner"] 126 + ''; 127 + }; 128 + 129 + home.stateVersion = "20.09"; 130 + }
+93
home/configurations/nmelzer_at_phoebe.nix
··· 1 + { 2 + self, 3 + nix, 4 + ... 5 + }: { 6 + config, 7 + pkgs, 8 + lib, 9 + ... 10 + }: let 11 + sshConfigPath = "${config.home.homeDirectory}/.ssh"; 12 + inherit (lib.hm) dag; 13 + spkgs = self.packages.${pkgs.system}; 14 + in { 15 + nixpkgs.allowedUnfree = ["google-chrome" "vscode" "discord" "obsidian" "slack"]; 16 + nixpkgs.config.permittedInsecurePackages = ["electron-25.9.0"]; 17 + profiles.base.needsGL = true; 18 + 19 + nix.checkConfig = false; 20 + nix.settings.extra-experimental-features = ["flakes" "nix-command"]; 21 + nix.extraOptions = "!include ${config.sops.secrets."access-tokens".path}"; 22 + nix.package = nix.packages.${pkgs.system}.nix-cli; 23 + 24 + activeProfiles = ["development"]; 25 + 26 + sops.age.sshKeyPaths = ["${sshConfigPath}/id_ed25519"]; 27 + sops.defaultSopsFile = "${self}/secrets/phoebe/nmelzer/default.yaml"; 28 + 29 + sops.secrets.ssh.path = "${sshConfigPath}/nightwing_config"; 30 + 31 + sops.secrets."access-tokens" = { 32 + path = "${config.home.homeDirectory}/.config/nix/access-tokens.conf"; 33 + mode = "0400"; 34 + sopsFile = "${self}/secrets/users/nmelzer/default.yaml"; 35 + }; 36 + 37 + sops.secrets."github" = { 38 + path = "${sshConfigPath}/github"; 39 + mode = "0400"; 40 + sopsFile = "${self}/secrets/users/nmelzer/github"; 41 + format = "binary"; 42 + }; 43 + 44 + sops.secrets."gitlab" = { 45 + path = "${sshConfigPath}/gitlab"; 46 + mode = "0400"; 47 + sopsFile = "${self}/secrets/users/nmelzer/gitlab"; 48 + format = "binary"; 49 + }; 50 + 51 + sops.secrets."nobbz_dev" = { 52 + path = "${sshConfigPath}/nobbz_dev"; 53 + mode = "0400"; 54 + sopsFile = "${self}/secrets/users/nmelzer/nobbz_dev"; 55 + format = "binary"; 56 + }; 57 + 58 + dconf.enable = true; 59 + 60 + home.packages = builtins.attrValues { 61 + inherit (pkgs) keepassxc nix-output-monitor discord obsidian vscode slack; 62 + inherit (config.nix) package; 63 + inherit (spkgs) switcher; 64 + }; 65 + 66 + xsession.windowManager.awesome.enable = lib.mkForce false; 67 + xsession.enable = lib.mkForce false; 68 + 69 + services.playerctld.enable = true; 70 + 71 + home.file."${config.gtk.gtk2.configLocation}".force = true; 72 + 73 + programs.ssh.includes = [ 74 + config.sops.secrets.ssh.path 75 + ]; 76 + 77 + programs.ssh.matchBlocks = { 78 + # TODO: properly use seperate key 79 + "gitlab.com-bravo" = dag.entryAfter ["gitlab.com"] { 80 + hostname = "gitlab.com"; 81 + addressFamily = "inet"; 82 + identityFile = "~/.ssh/id_ed25519"; 83 + }; 84 + 85 + # TODO: Make the actual hosts identity file configurable by other means. Actually moving all the logic over to `home/modules/profiles/base/default.nix`. 86 + "*.internal.nobbz.dev" = lib.mkForce (dag.entryAfter ["delly-nixos.adoring_suess.zerotier" "tux-nixos.adoring_suess.zerotier" "nixos.adoring_suess.zerotier"] { 87 + identityFile = "~/.ssh/id_ed25519"; 88 + user = "nmelzer"; 89 + }); 90 + }; 91 + 92 + home.stateVersion = "20.09"; 93 + }
+19 -40
home/modules/default.nix
··· 1 - inputs: { 2 - "profiles" = import ./profiles inputs; 3 - "profiles/base" = import ./profiles/base inputs; 4 - "profiles/browsing" = import ./profiles/browsing inputs; 5 - "profiles/development" = import ./profiles/development inputs; 6 - "profiles/home-office" = import ./profiles/home-office inputs; 1 + { 2 + nobbz.homeManagerModules = { 3 + "profiles" = ./profiles; 4 + "profiles/base" = ./profiles/base; 5 + "profiles/browsing" = ./profiles/browsing; 6 + "profiles/development" = ./profiles/development; 7 7 8 - "languages" = import ./languages inputs; 9 - "languages/agda" = import ./languages/agda inputs; 10 - "languages/c++" = import ./languages/c++ inputs; 11 - "languages/clojure" = import ./languages/clojure inputs; 12 - "languages/elixir" = import ./languages/elixir inputs; 13 - "languages/erlang" = import ./languages/erlang inputs; 14 - "languages/go" = import ./languages/go inputs; 15 - "languages/nim" = import ./languages/nim inputs; 16 - "languages/nix" = import ./languages/nix inputs; 17 - "languages/python" = import ./languages/python inputs; 18 - "languages/rust" = import ./languages/rust inputs; 19 - "languages/tex" = import ./languages/tex inputs; 20 - "languages/lua" = import ./languages/lua inputs; 21 - "languages/terraform" = import ./languages/terraform inputs; 8 + "programs/advcp" = ./programs/advcp; 9 + "programs/eza" = ./programs/eza; 10 + "programs/ghostty" = ./programs/ghostty; 11 + "programs/nixpkgs" = ./programs/nixpkgs; 12 + "programs/p10k" = ./programs/p10k; 13 + "programs/rbw" = ./programs/rbw; 14 + "programs/wezterm" = ./programs/wezterm; 22 15 23 - "programs/advcp" = import ./programs/advcp inputs; 24 - "programs/openshift" = import ./programs/openshift inputs; 25 - "programs/zshell" = import ./programs/zshell inputs; 26 - "programs/nixpkgs" = import ./programs/nixpkgs inputs; 27 - "programs/exa" = import ./programs/exa inputs; 28 - "programs/emacs" = import ./programs/emacs inputs; 29 - "programs/emacs/beacon" = import ./programs/emacs/beacon.nix inputs; 30 - "programs/emacs/company" = import ./programs/emacs/company.nix inputs; 31 - "programs/emacs/helm" = import ./programs/emacs/helm.nix inputs; 32 - "programs/emacs/lsp" = import ./programs/emacs/lsp.nix inputs; 33 - "programs/emacs/projectile" = import ./programs/emacs/projectile.nix inputs; 34 - "programs/emacs/telephoneline" = import ./programs/emacs/telephoneline.nix inputs; 35 - "programs/emacs/lib" = import ./programs/emacs/lib.nix inputs; 36 - "programs/emacs/whichkey" = import ./programs/emacs/whichkey inputs; 16 + "services/insync" = ./services/insync; 17 + "services/rustic" = ./services/rustic; 37 18 38 - "services/keyleds" = import ./services/keyleds inputs; 39 - "services/insync" = import ./services/insync inputs; 40 - "services/restic" = import ./services/restic inputs; 41 - 42 - "misc/awesome" = import ./misc/awesome inputs; 43 - "misc/home" = import ./misc/home inputs; 19 + "misc/awesome" = ./misc/awesome; 20 + "misc/home" = ./misc/home; 21 + "misc/rofi" = ./misc/rofi; 22 + }; 44 23 }
-25
home/modules/languages/agda/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.languages.agda; 7 - in { 8 - options.languages.agda = { 9 - enable = lib.mkEnableOption "Agda language support"; 10 - }; 11 - 12 - config = lib.mkIf cfg.enable { 13 - programs.emacs = { 14 - localPackages."init-agda" = { 15 - tag = "Setup Agda"; 16 - comments = []; 17 - requires = []; 18 - packageRequires = ep: with ep.melpaStablePackages; [agda2-mode eri annotation]; 19 - code = '' 20 - (load-library "agda2-mode") 21 - ''; 22 - }; 23 - }; 24 - }; 25 - }
-32
home/modules/languages/c++/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.cpp; 8 - 9 - inherit (pkgs) ccls; 10 - in { 11 - options.languages.cpp = { 12 - enable = lib.mkEnableOption "Enable support for C++ language"; 13 - }; 14 - 15 - config = lib.mkIf cfg.enable { 16 - programs.emacs = { 17 - localPackages."init-cpp" = { 18 - tag = "Setup C++"; 19 - requires = ["ccls"]; 20 - packageRequires = ep: [ep.ccls]; 21 - comments = []; 22 - code = '' 23 - (setq ccls-executable "${ccls}/bin/ccls") 24 - ''; 25 - }; 26 - }; 27 - 28 - programs.git.ignores = [ 29 - ".ccls-cache/" 30 - ]; 31 - }; 32 - }
-29
home/modules/languages/clojure/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.clojure; 8 - in { 9 - options.languages.clojure = { 10 - enable = lib.mkEnableOption "Enable support for the clojure language"; 11 - }; 12 - 13 - config = lib.mkIf cfg.enable { 14 - programs.emacs = { 15 - extraPackages = ep: [ep.clojure-mode]; 16 - 17 - lsp-mode = { 18 - enable = true; 19 - languages = ["clojure"]; 20 - }; 21 - 22 - extraInit = '' 23 - (setenv "PATH" 24 - (concat "${pkgs.leiningen}/bin:" (getenv "PATH"))) 25 - (setq lsp-clojure-server-command '("${pkgs.bash}/bin/bash" "-c" "${pkgs.clojure-lsp}/bin/clojure-lsp")) 26 - ''; 27 - }; 28 - }; 29 - }
-15
home/modules/languages/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - langsEnabler = let 7 - reducer = l: r: {"${r}".enable = true;} // l; 8 - in 9 - builtins.foldl' reducer {} config.enabledLanguages; 10 - in { 11 - options.enabledLanguages = 12 - lib.mkOption {type = lib.types.listOf lib.types.str;}; 13 - 14 - config = {languages = langsEnabler;}; 15 - }
-53
home/modules/languages/elixir/default.nix
··· 1 - {self, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.elixir; 8 - 9 - inherit (self.packages.x86_64-linux) elixir-lsp; 10 - in { 11 - options.languages.elixir = { 12 - enable = lib.mkEnableOption "Enable support for elixir language"; 13 - }; 14 - 15 - config = lib.mkIf cfg.enable { 16 - programs.zshell.aliases = { 17 - mdg = "mix deps.get"; 18 - mic = "mix compile"; 19 - mit = "mix test"; 20 - }; 21 - 22 - programs.emacs = { 23 - lsp-mode = { 24 - enable = true; 25 - languages = ["elixir"]; 26 - }; 27 - 28 - localPackages."init-elixir" = { 29 - tag = "Setup elixir"; 30 - comments = []; 31 - requires = ["company" "flycheck"]; 32 - packageRequires = ep: [ 33 - ep.company 34 - ep.elixir-mode 35 - ep.flycheck 36 - ep.lsp-mode 37 - ]; 38 - code = '' 39 - (add-to-list 'exec-path "${elixir-lsp}/bin") 40 - (setq lsp-elixir-server-command '("elixir-ls")) 41 - 42 - (add-hook 'elixir-mode-hook 43 - (lambda () 44 - (subword-mode) 45 - (company-mode) 46 - (flycheck-mode) 47 - (lsp-lens-mode) 48 - (add-hook 'before-save-hook #'lsp-format-buffer nil t))) 49 - ''; 50 - }; 51 - }; 52 - }; 53 - }
-48
home/modules/languages/erlang/default.nix
··· 1 - {self, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.erlang; 8 - 9 - inherit (self.packages.x86_64-linux) erlang-ls; 10 - in { 11 - options.languages.erlang = { 12 - enable = lib.mkEnableOption "Enable support for erlang language"; 13 - }; 14 - 15 - config = lib.mkIf cfg.enable { 16 - programs.emacs.extraPackages = ep: [ 17 - (ep.erlang.overrideAttrs (oa: { 18 - buildInputs = oa.buildInputs ++ [pkgs.perl pkgs.ncurses]; 19 - })) 20 - ]; 21 - 22 - programs.emacs.lsp-mode = { 23 - enable = true; 24 - languages = ["erlang"]; 25 - }; 26 - 27 - programs.emacs.extraInit = '' 28 - ;; Configure erlang related stuff 29 - (setq lsp-erlang-server-path "${erlang-ls}/bin/erlang_ls") 30 - 31 - (eval-after-load 'erlang 32 - '(define-key erlang-mode-map (kbd "C-M-i") #'company-lsp)) 33 - 34 - (add-hook 'erlang-mode-hook 35 - (lambda () 36 - (linum-mode) 37 - ('column-number-mode) 38 - (lsp) 39 - (add-hook 'before-save-hook 'lsp-format-buffer nil t) 40 - (subword-mode) 41 - (company-mode) 42 - (flycheck-mode))) 43 - 44 - (add-hook 'origami-mode-hook 'lsp-origami-mode) 45 - (add-hook 'erlang-mode-hook 'origami-mode) 46 - ''; 47 - }; 48 - }
-34
home/modules/languages/go/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.go; 8 - in { 9 - options.languages.go = { 10 - enable = lib.mkEnableOption "Enable support for the go language"; 11 - }; 12 - 13 - config = lib.mkIf cfg.enable { 14 - programs.emacs.extraPackages = ep: [ep.go-mode]; 15 - 16 - programs.emacs.lsp-mode = { 17 - enable = true; 18 - languages = ["go"]; 19 - }; 20 - 21 - home.packages = [pkgs.go]; 22 - 23 - programs.emacs.extraInit = '' 24 - (add-to-list 'exec-path "${pkgs.gopls}/bin") 25 - 26 - (add-hook 'go-mode-hook 27 - (lambda () 28 - (subword-mode) 29 - (company-mode) 30 - (flymake-mode) 31 - (add-hook 'before-save-hook #'lsp-format-buffer nil t))) 32 - ''; 33 - }; 34 - }
-14
home/modules/languages/lua/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.languages.lua; 7 - in { 8 - options.languages.lua = { 9 - enable = lib.mkEnableOption "Enable support for lua language"; 10 - }; 11 - 12 - config = 13 - lib.mkIf cfg.enable {programs.emacs.extraPackages = ep: [ep.lua-mode];}; 14 - }
-33
home/modules/languages/nim/default.nix
··· 1 - {unstable, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.nim; 8 - 9 - inherit (unstable.legacyPackage.x86_64-linux) nim; 10 - in { 11 - options.languages.nim = { 12 - enable = lib.mkEnableOption "Nim-lang"; 13 - }; 14 - 15 - config = lib.mkIf cfg.enable { 16 - programs.emacs = { 17 - localPackages."init-nim" = { 18 - tag = "Setup Nim Mode"; 19 - requires = ["company" "flycheck"]; 20 - packageRequires = ep: [ep.nim-mode ep.lsp-mode ep.company ep.flycheck]; 21 - comments = []; 22 - code = '' 23 - (add-hook 'nim-mode-hook 24 - (lambda () 25 - (subword-mode) 26 - (company-mode) 27 - (flycheck-mode) 28 - (lsp-lens-mode))) 29 - ''; 30 - }; 31 - }; 32 - }; 33 - }
-38
home/modules/languages/nix/default.nix
··· 1 - {rnix-lsp, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - rnix-lsp, 6 - ... 7 - }: let 8 - cfg = config.languages.nix; 9 - 10 - # rnixLsp = rnix-lsp.defaultPackage.x86_64-linux; 11 - rnixLsp = pkgs.rnix-lsp; 12 - in { 13 - options.languages.nix = { 14 - enable = lib.mkEnableOption "Enable support for the nix language"; 15 - }; 16 - 17 - config = lib.mkIf cfg.enable { 18 - programs.emacs.extraPackages = ep: [ep.lsp-mode ep.nix-mode ep.flycheck]; 19 - 20 - programs.emacs.extraInit = '' 21 - (require 'lsp-mode) 22 - 23 - ;; make lsp-mode aware of nix 24 - (add-to-list 'lsp-language-id-configuration '(nix-mode . "nix")) 25 - (lsp-register-client 26 - (make-lsp-client :new-connection (lsp-stdio-connection '("${rnixLsp}/bin/rnix-lsp")) 27 - :major-modes '(nix-mode) 28 - :server-id 'nix)) 29 - 30 - (add-hook 'nix-mode-hook 31 - (lambda () 32 - (lsp) 33 - (subword-mode) 34 - (company-mode) 35 - (flycheck-mode))) 36 - ''; 37 - }; 38 - }
-70
home/modules/languages/python/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.python; 8 - pyls = "${pkgs.python37Packages.python-language-server}/bin/pyls"; 9 - mspyls = "${pkgs.python-language-server}/bin/python-language-server"; 10 - 11 - lsBin = 12 - if cfg.useMS 13 - then mspyls 14 - else pyls; 15 - 16 - lsHook = 17 - if cfg.useMS 18 - then "(add-hook 'python-mode-hook (lambda () (require 'lsp-python-ms) (lsp)))" 19 - else ""; 20 - lsExec = 21 - if cfg.useMS 22 - then ''(setq lsp-python-ms-executable "${lsBin}")'' 23 - else ''(setq lsp-pyls-server-command '("${lsBin}"))''; 24 - in { 25 - options.languages.python = { 26 - enable = lib.mkEnableOption "Enable support for python language"; 27 - useMS = lib.mkEnableOption "Use MS language server rather than palantirs"; 28 - }; 29 - 30 - config = lib.mkIf cfg.enable { 31 - programs.emacs.lsp-mode = { 32 - enable = true; 33 - languages = 34 - if cfg.useMS 35 - then [] 36 - else ["python"]; 37 - }; 38 - 39 - programs.emacs.localPackages."init-python" = { 40 - tag = "Setup and prepare the python language modes"; 41 - comments = []; 42 - requires = []; 43 - packageRequires = ep: 44 - [ 45 - ep.lsp-pyright 46 - ep.python-docstring 47 - (config.programs.emacs.localPackages."init-lsp".packageRequires ep) 48 - ] 49 - ++ ( 50 - if cfg.useMS 51 - then [ep.lsp-python-ms] 52 - else [] 53 - ); 54 - code = '' 55 - ${lsHook} 56 - 57 - ${lsExec} 58 - 59 - (add-hook 'python-mode-hook 60 - (lambda () 61 - (require 'lsp-pyright) 62 - (subword-mode) 63 - (company-mode) 64 - (flycheck-mode) 65 - (python-docstring-mode) 66 - (lsp))) 67 - ''; 68 - }; 69 - }; 70 - }
-34
home/modules/languages/rust/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.languages.rust; 7 - in { 8 - options.languages.rust = { 9 - enable = lib.mkEnableOption "Enable support for Rust language"; 10 - }; 11 - 12 - config = lib.mkIf cfg.enable { 13 - programs.emacs.extraPackages = ep: [ep.rust-mode ep.pest-mode]; 14 - 15 - programs.emacs.lsp-mode = { 16 - enable = true; 17 - languages = ["rust"]; 18 - }; 19 - 20 - programs.emacs.extraInit = '' 21 - (setq lsp-rust-rls-server-command "rls") 22 - 23 - (autoload 'pest-mode "pest-mode") 24 - (add-to-list #'auto-mode-alist '("\\.pest\\'" .pest-mode)) 25 - 26 - (add-hook 'rust-mode-hook 27 - (lambda () 28 - (subword-mode) 29 - (company-mode) 30 - (flycheck-mode) 31 - (add-hook 'before-save-hook #'lsp-format-buffer nil t))) 32 - ''; 33 - }; 34 - }
-28
home/modules/languages/terraform/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.languages.terraform; 7 - in { 8 - options.languages.terraform = { 9 - enable = lib.mkEnableOption "Enable support for the terraform lanugage"; 10 - }; 11 - 12 - config = lib.mkIf cfg.enable { 13 - programs.emacs = { 14 - localPackages."init-terraform" = { 15 - tag = "Setup and prepare terraform editing modes"; 16 - comments = []; 17 - requires = ["company-terraform"]; 18 - packageRequires = ep: [ep.company-terraform ep.terraform-mode]; 19 - code = '' 20 - (add-hook 'terraform-mode-hook 21 - (lambda () 22 - (company-mode) 23 - (company-terraform))) 24 - ''; 25 - }; 26 - }; 27 - }; 28 - }
-30
home/modules/languages/tex/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.languages.tex; 8 - in { 9 - options.languages.tex = { 10 - enable = lib.mkEnableOption "LaTeX language support"; 11 - }; 12 - 13 - config = lib.mkIf cfg.enable { 14 - programs.emacs.extraPackages = ep: [ep.auctex]; 15 - 16 - programs.emacs.lsp-mode = { 17 - enable = true; 18 - }; 19 - 20 - programs.emacs.extraInit = '' 21 - (add-to-list 'exec-path "${pkgs.texlab}/bin") 22 - 23 - (add-hook 'tex-mode-hook 24 - (lambda () 25 - (company-mode) 26 - (flymake-mode) 27 - (lsp))) 28 - ''; 29 - }; 30 - }
+61 -19
home/modules/misc/awesome/default.nix
··· 6 6 }: let 7 7 cfg = config.xsession.windowManager.awesome; 8 8 9 - rofi = pkgs.rofi.override { 10 - plugins = [pkgs.rofi-emoji]; 11 - }; 9 + flameshot = lib.getExe pkgs.flameshot; 12 10 13 - self' = self.packages.x86_64-linux; 11 + bls = lib.getExe (pkgs.betterlockscreen.override {withDunst = false;}); 12 + scrot = lib.getExe pkgs.scrot; 13 + 14 + locker = pkgs.writeShellScript "betterlockscreen-with-screenshot" '' 15 + tmpf="$(mktemp -d)" 16 + file="$tmpf/screenshot.png" 17 + ${scrot} -z $file 18 + ${bls} -u $file --display 1 --span --fx blur --blur 1.0 19 + rm -rf $tmpf 20 + ${bls} -l blur --display 1 --span --off 30 21 + ''; 22 + 23 + mediaKeys = let 24 + keyMap = let 25 + amixer = "${pkgs.alsa-utils}/bin/amixer"; 26 + playerctl = "${pkgs.playerctl}/bin/playerctl"; 27 + in { 28 + "XF86AudioMute" = "${amixer} set Master 1+ toggle"; 29 + "XF86AudioLowerVolume" = "${amixer} set Master 4%-"; 30 + "XF86AudioRaiseVolume" = "${amixer} set Master 4%+"; 31 + "XF86AudioPlay" = "${playerctl} play-pause"; 32 + "XF86AudioPrev" = "${playerctl} previous"; 33 + "XF86AudioNext" = "${playerctl} next"; 34 + }; 35 + keyList = lib.attrsets.mapAttrsToList (key: command: ''awful.key({ }, "${key}", function () awful.util.spawn("${command}") end)'') keyMap; 36 + in 37 + lib.strings.concatStringsSep ",\n " keyList; 14 38 15 39 autostartScript = let 16 40 entries = builtins.map (e: "\"${e}\",") cfg.autostart; ··· 58 82 options.xsession.windowManager.awesome = { 59 83 terminalEmulator = lib.mkOption { 60 84 type = lib.types.str; 61 - default = "${pkgs.konsole}/bin/konsole"; 85 + default = "${lib.getExe pkgs.wezterm}"; 86 + }; 87 + 88 + lockCommand = lib.mkOption { 89 + type = lib.types.str; 90 + # default = "${lib.getExe pkgs.i3lock}"; 91 + default = "${locker}"; 62 92 }; 63 93 64 94 launcher = lib.mkOption { 65 95 type = lib.types.str; 66 - default = "${rofi}/bin/rofi -modi drun#run#window#ssh#emoji#unicode:${self'."rofi/unicode"}/bin/rofiunicode.sh -show drun -show-icons"; 96 + default = "${pkgs.rofi}/bin/rofi -modi drun -show drun -show-icons"; 97 + }; 98 + 99 + windowSwitcher = lib.mkOption { 100 + type = lib.types.str; 101 + default = "${pkgs.rofi}/bin/rofi -modi window -show window -show-icons"; 102 + }; 103 + 104 + emojiPicker = lib.mkOption { 105 + type = lib.types.str; 106 + default = "${pkgs.rofi}/bin/rofi -modi drun -show drun -show-icons"; 67 107 }; 68 108 69 109 autostart = lib.mkOption { ··· 75 115 config = lib.mkIf cfg.enable { 76 116 xsession.enable = true; 77 117 78 - xsession.windowManager.awesome.package = pkgs.awesome.overrideAttrs (oa: { 79 - src = pkgs.fetchFromGitHub { 80 - owner = "awesomewm"; 81 - repo = "awesome"; 82 - rev = "22dedf7"; 83 - sha256 = "sha256-GD0MxMU4tz5SbahL0+ADUQXNoq1fIxOSXiEwoObC0ng="; 84 - }; 85 - }); 118 + xsession.initExtra = '' 119 + unset XDG_CURRENT_DESKTOP 120 + unset DESKTOP_SESSION 121 + ''; 86 122 87 123 home.file.".config/awesome/rc.lua".text = '' 88 124 --[[ ··· 161 197 -- Create a launcher widget and a main menu 162 198 myawesomemenu = { 163 199 { "launcher", '${cfg.launcher}' }, 200 + { "windows", '${cfg.windowSwitcher}' }, 201 + { "emoji", '${cfg.emojiPicker}' }, 164 202 { "hotkeys", function() return false, hotkeys_popup.show_help end}, 165 203 { "manual", terminal .. " -e man awesome" }, 166 204 { "edit config", editor_cmd .. " " .. awesome.conffile }, 167 - { "lock session", '${pkgs.i3lock}/bin/i3lock' }, 205 + { "lock session", '${cfg.lockCommand}' }, 168 206 { "restart", awesome.restart }, 169 207 { "quit", function() awesome.quit() end} 170 208 } ··· 334 372 end, 335 373 {description = "focus previous by index", group = "client"} 336 374 ), 337 - awful.key({ modkey, }, "w", function () mymainmenu:show() end, 338 - {description = "show main menu", group = "awesome"}), 339 375 340 376 -- Layout manipulation 341 377 awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, ··· 397 433 awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end, 398 434 {description = "run prompt", group = "launcher"}), 399 435 400 - awful.key({ modkey }, "d", function () awful.util.spawn('${cfg.launcher}') end), 401 - awful.key({ modkey }, "y", function () awful.util.spawn('${pkgs.i3lock}/bin/i3lock') end), 436 + awful.key({ modkey }, "d", function () awful.util.spawn('${cfg.launcher}') end, {description = "open launcher", group = "launcher"}), 437 + awful.key({ modkey }, "w", function () awful.util.spawn('${cfg.windowSwitcher}') end, {description = "open window selecter", group = "launcher"}), 438 + awful.key({ modkey, "Shift" }, "e", function () awful.util.spawn('${cfg.emojiPicker}') end, {description = "open emoji picker", group = "launcher"}), 439 + 440 + awful.key({ modkey }, "y", function () awful.util.spawn('${cfg.lockCommand}') end, {description = "lock screen", group = "client" }), 441 + awful.key({ modkey }, "b", function () awful.util.spawn('${flameshot} gui') end, {description = "create screenshot", group = "client" }), 402 442 403 443 awful.key({ modkey }, "x", 404 444 function () ··· 413 453 -- Menubar 414 454 awful.key({ modkey }, "p", function() menubar.show() end, 415 455 {description = "show the menubar", group = "launcher"}) 456 + 457 + ${lib.optionalString config.services.playerctld.enable ",${mediaKeys}"} 416 458 ) 417 459 418 460 clientkeys = gears.table.join(
+6 -15
home/modules/misc/home/default.nix
··· 1 - { 2 - nixpkgs-2105, 3 - unstable, 4 - self, 5 - ... 6 - }: { 1 + {self, ...}: { 7 2 config, 8 3 pkgs, 9 4 lib, 10 5 ... 11 6 }: let 12 - self' = self.packages.x86_64-linux; 7 + self' = self.packages.${pkgs.system}; 13 8 in { 14 9 profiles.base.enable = true; 15 10 fonts.fontconfig.enable = true; ··· 25 20 26 21 packages = let 27 22 p = pkgs; 28 - s = self'; 29 23 in [ 30 24 p.cachix 31 - # nix-prefetch-scripts 32 - p.nix-review 33 25 p.exercism 34 26 p.tmate 35 - p.element-desktop 36 - # p.powershell 37 - s."dracula/konsole" 27 + 28 + # There is a conflict with the ZSH completion plugin, installed by default 29 + # therefore we need to override here 30 + (lib.setPrio 0 p.nixpkgs-review) 38 31 39 32 p.fira-code 40 33 p.cascadia-code ··· 46 39 exec ${p.timewarrior}/bin/timew "$@" 47 40 '') 48 41 ]; 49 - 50 - stateVersion = "20.09"; 51 42 }; 52 43 }
+22
home/modules/misc/rofi/common.rasi
··· 1 + configuration { 2 + font: "Departure Mono 22"; 3 + terminal: "@TERMINAL@"; 4 + fixed-num-lines: false; 5 + show-icons: true; 6 + drun-show-actions: false; 7 + sidebar-mode: true; 8 + window-format: "{w}\t| {c}\t| {t}"; 9 + 10 + location: 2; 11 + width: 75; 12 + yoffset: 0; 13 + 14 + timeout { 15 + action: "kb-cancel"; 16 + delay: 0; 17 + } 18 + filebrowser { 19 + directories-first: true; 20 + sorting-method: "name"; 21 + } 22 + }
+63
home/modules/misc/rofi/default.nix
··· 1 + {self, ...}: { 2 + pkgs, 3 + lib, 4 + npins, 5 + ... 6 + }: let 7 + self' = self.packages.x86_64-linux; 8 + 9 + common_rasi = pkgs.runCommandNoCC "common.rasi" {preferLocalBuild = true;} '' 10 + substitute ${./common.rasi} $out \ 11 + --subst-var-by TERMINAL ${lib.getExe pkgs.wezterm} 12 + ''; 13 + 14 + catppuccin = pkgs.runCommandNoCC "catppuccin.rasi" {preferLocalBuild = true;} '' 15 + substitute ${npins.catppuccin-rofi}/catppuccin-default.rasi $out \ 16 + --replace-fail '"catppuccin-mocha"' '"${npins.catppuccin-rofi}/themes/catppuccin-mocha.rasi"' 17 + ''; 18 + 19 + writeConfig = name: body: 20 + pkgs.writeText name 21 + # rasi 22 + '' 23 + configuration { 24 + ${body} 25 + } 26 + @theme "${catppuccin}" 27 + @import "${common_rasi}" 28 + ''; 29 + 30 + windowSwitcherConfig = writeConfig "window-switcher-config" ''modes: "window";''; 31 + emojiConfig = writeConfig "emoji-config" ''modes: "emoji#unicode:${self'."rofi/unicode"}/bin/rofiunicode.sh";''; 32 + launcherConfig = writeConfig "launcher-config" '' 33 + modes: "drun#run#ssh"; 34 + ssh-command: "{terminal} ssh {host}"; 35 + ''; 36 + 37 + wrapper = rofi: config: 38 + pkgs.callPackage ({ 39 + rofi, 40 + runCommandNoCC, 41 + makeWrapper, 42 + }: 43 + runCommandNoCC "rofi" { 44 + nativeBuildInputs = [makeWrapper]; 45 + inherit (rofi) meta; 46 + } '' 47 + mkdir -p $out/bin 48 + makeWrapper ${lib.getExe rofi} $out/bin/rofi \ 49 + --add-flags "-config ${config}" 50 + '') {inherit rofi;}; 51 + 52 + launcherPkg = pkgs.rofi; 53 + windowSwitcherPkg = pkgs.rofi; 54 + emojiPkg = pkgs.rofi.override {plugins = [pkgs.rofi-emoji];}; 55 + 56 + launcher = wrapper launcherPkg launcherConfig; 57 + windowSwitcher = wrapper windowSwitcherPkg windowSwitcherConfig; 58 + emoji = wrapper emojiPkg emojiConfig; 59 + in { 60 + xsession.windowManager.awesome.launcher = "${lib.getExe launcher} -show drun"; 61 + xsession.windowManager.awesome.windowSwitcher = "${lib.getExe windowSwitcher} -show window"; 62 + xsession.windowManager.awesome.emojiPicker = "${lib.getExe emoji} -show emoji"; 63 + }
+11
home/modules/profiles/base/colums-fix.patch
··· 1 + --- a/fzf-tab.zsh 2 + +++ b/fzf-tab.zsh 3 + @@ -102,7 +102,7 @@ builtin unalias -m '[^+]*' 4 + 5 + # must run with user options; don't move `emulate -L zsh` above this line 6 + (( $+builtins[fzf-tab-compcap-generate] )) && fzf-tab-compcap-generate -i 7 + - COLUMNS=500 _ftb__main_complete "$@" || ret=$? 8 + + _ftb__main_complete "$@" || ret=$? 9 + (( $+builtins[fzf-tab-compcap-generate] )) && fzf-tab-compcap-generate -o 10 + 11 + emulate -L zsh -o extended_glob
+135 -99
home/modules/profiles/base/default.nix
··· 1 - {self, ...}: { 1 + { 2 + self, 3 + nix, 4 + nvim, 5 + nix-gl, 6 + ... 7 + }: { 2 8 config, 3 9 lib, 4 10 pkgs, 11 + npins, 5 12 ... 6 13 }: let 7 14 cfg = config.profiles.base; 8 15 9 - inherit (self.packages.x86_64-linux) emacs; 10 16 inherit (lib.hm) dag; 11 17 12 18 # TODO: make these a bit more nice, so that repeating the hosts and individual config isn't necessary. ··· 25 31 cp $src $out/_nix 26 32 ''; 27 33 }; 34 + 35 + fzf-tab = pkgs.stdenv.mkDerivation { 36 + pname = "fzf-tab"; 37 + version = "0-unstable-${npins.fzf-tab.revision}"; 38 + 39 + src = npins.fzf-tab; 40 + 41 + # we need this patch due to a bug between fzf-tab and p10k: 42 + # https://github.com/Aloxaf/fzf-tab/issues/176 43 + patches = [./colums-fix.patch]; 44 + 45 + installPhase = '' 46 + mkdir -p $out 47 + cp -rv . $out 48 + ''; 49 + }; 28 50 in { 29 51 options.profiles.base = { 30 52 enable = lib.mkEnableOption "The base profile, should be always enabled"; 53 + 54 + needsGL = lib.mkEnableOption "nix-gl wrappers"; 31 55 }; 32 56 33 57 config = lib.mkIf cfg.enable { 34 - home.sessionVariables = rec { 35 - EDITOR = "emacs -nw"; 36 - VISUAL = "emacs"; 37 - GIT_EDITOR = EDITOR; 58 + sops.secrets.nix-community = { 59 + path = "${config.home.homeDirectory}/.ssh/nix-community"; 60 + mode = "0400"; 61 + sopsFile = "${self}/secrets/users/nmelzer/nix-community"; 62 + format = "binary"; 63 + }; 64 + 65 + programs.rbw.enable = true; 66 + 67 + manual.manpages.enable = false; 68 + 69 + services.vscode-server.enable = lib.mkDefault pkgs.stdenv.isLinux; 70 + 71 + home.sessionVariables = { 72 + EDITOR = "nvim"; 38 73 }; 39 74 40 75 gtk.enable = true; 41 - gtk.theme.package = pkgs.gnome3.gnome-themes-extra; 76 + gtk.theme.package = pkgs.gnome-themes-extra; 42 77 gtk.theme.name = "Adwaita-dark"; 43 78 79 + services.pueue.enable = true; 80 + 44 81 home.keyboard.layout = "de"; 45 - home.packages = [pkgs.hydra-check pkgs.dconf]; 82 + home.packages = let 83 + optisave = 84 + pkgs.resholve.writeScriptBin "optisave" { 85 + inputs = builtins.attrValues {inherit (pkgs) fd pv gawk coreutils gnused;}; 86 + interpreter = "${pkgs.bash}/bin/bash"; 87 + execer = [ 88 + # TODO: Make this `might` or `can` in the long run 89 + "cannot:${pkgs.fd}/bin/fd" 90 + ]; 91 + } '' 92 + count=$(fd . /nix/store/.links/ | pv -l | wc -l) 93 + 94 + # TODO: make resholve understant the call to `stat` 95 + saved=$(fd . /nix/store/.links/ -X ${pkgs.coreutils}/bin/stat --format='%h %s' {} \ 96 + | pv -altrpe -s $count \ 97 + | awk '{sum += ($1 - 2) * $2} END {print sum}') 98 + 99 + printf "Currently hardlinking saves %sB (%s B)\n" \ 100 + "$(numfmt --to=iec-i --format='%.2f' ''${saved} \ 101 + | sed -E 's/([0-9])([A-Za-z])/\1 \2/')" \ 102 + "$(numfmt --to=none --format="%'f" ''${saved})" 103 + ''; 104 + neovide = 105 + if cfg.needsGL 106 + then 107 + pkgs.writeShellScriptBin nvim.packages.x86_64-linux.neovide.meta.mainProgram '' 108 + exec ${lib.getExe nix-gl.packages.x86_64-linux.nixGLIntel} ${lib.getExe nvim.packages.x86_64-linux.neovide} "$@" 109 + '' 110 + else nvim.packages.x86_64-linux.neovide; 111 + in 112 + lib.mkMerge [ 113 + [optisave pkgs.departure-mono pkgs.hydra-check nvim.packages.x86_64-linux.neovim neovide] 114 + (lib.mkIf pkgs.stdenv.isLinux [pkgs.dconf]) 115 + ]; 116 + 117 + # dconf.enable = lib.mkMerge [ 118 + # (lib.mkIf pkgs.stdenv.isLinux true) 119 + # (lib.mkIf pkgs.stdenv.isDarwin false) 120 + # ]; 46 121 47 122 xsession = { 48 123 enable = true; ··· 54 129 55 130 programs = { 56 131 advancedCopy.enable = true; 57 - bat.enable = true; 58 132 direnv.enable = true; 59 133 direnv.nix-direnv.enable = true; 60 - exa.enable = true; 134 + direnv.nix-direnv.package = pkgs.nix-direnv.override {nix = nix.packages.${pkgs.system}.default;}; 135 + eza.enable = true; 136 + fzf.enable = true; 61 137 home-manager.enable = true; 62 138 htop.enable = true; 63 139 jq.enable = true; 64 - openshift.enable = true; 140 + p10k.enable = true; 141 + zoxide.enable = true; 142 + 143 + bat = { 144 + enable = true; 145 + 146 + config.theme = "mocha"; 147 + 148 + themes.mocha = { 149 + src = npins.catppuccin-bat; 150 + file = "themes/Catppuccin Mocha.tmTheme"; 151 + }; 152 + }; 65 153 66 154 ssh = { 67 155 enable = true; 68 156 compression = true; 157 + controlMaster = "auto"; 69 158 70 159 matchBlocks = { 71 160 "*.internal.nobbz.dev" = dag.entryAfter zerotierHosts { ··· 73 162 user = "nmelzer"; 74 163 }; 75 164 165 + "build-box.nix-community.org" = { 166 + identityFile = config.sops.secrets.nix-community.path; 167 + user = "nobbz"; 168 + }; 169 + 170 + "aarch64-build-box.nix-community.org" = { 171 + identityFile = config.sops.secrets.nix-community.path; 172 + user = "nobbz"; 173 + }; 174 + 76 175 "ryzen-ubuntu.adoring_suess.zerotier" = { 77 176 hostname = "172.24.237.73"; 78 177 }; ··· 84 183 host.port = 80; 85 184 } 86 185 ]; 87 - }; 88 - "thetys.internal.nobbz.dev" = { 89 - user = "demo"; 90 186 }; 91 187 92 188 "*.nobbz.dev" = { ··· 102 198 "github.com" = { 103 199 identityFile = "~/.ssh/github"; 104 200 }; 105 - 106 - "*.actum.internal" = { 107 - user = "norbert.melzer"; 108 - identityFile = "~/.ssh/actum-gitlab"; 109 - }; 110 - 111 - "*.vcp.internal" = { 112 - user = "cloudseeds"; 113 - identityFile = "~/.ssh/vogel"; 114 - }; 115 - 116 - "deploy-vogel.custpoc.cloudseeds.de" = 117 - dag.entryBefore [ 118 - "*.custpoc.cloudseeds.de" 119 - "*.cloudseeds.de" 120 - ] 121 - { 122 - user = "cloudseeds"; 123 - identityFile = "~/.ssh/vogel"; 124 - }; 125 - 126 - "repo.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { 127 - identityFile = "~/.ssh/id_rsa"; 128 - }; 129 - 130 - "*.custpoc.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { 131 - user = "norbert.melzer"; 132 - identityFile = "~/.ssh/actum-gitlab"; 133 - }; 134 - 135 - "com01.internal.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { 136 - hostname = "192.168.123.22"; 137 - user = "root"; 138 - }; 139 - 140 - "ironic.internal.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { 141 - hostname = "192.168.123.31"; 142 - user = "root"; 143 - }; 144 - 145 - "*.cloudseeds.de" = { 146 - user = "norbert.melzer"; 147 - identityFile = "~/.ssh/cloudseeds"; 148 - }; 149 201 }; 150 202 }; 151 203 152 - emacs = { 153 - enable = true; 154 - package = emacs; 155 - }; 156 - 157 204 tmux = { 158 205 enable = true; 159 206 160 207 clock24 = true; 161 208 historyLimit = 10000; 162 - terminal = "screen-256color"; 209 + terminal = "tmux-256color"; 163 210 164 - plugins = let 165 - tp = pkgs.tmuxPlugins; 166 - in [ 167 - # { 168 - # plugin = tp.dracula; 169 - # extraConfig = '' 170 - # set -g @dracula-show-battery true 171 - # set -g @dracula-show-powerline true 172 - # set -g @dracula-refresh-rate 10 173 - # ''; 174 - # } 211 + plugins = [ 212 + { 213 + plugin = pkgs.tmuxPlugins.catppuccin; 214 + extraConfig = '' 215 + set -g @catppuccin_flavor "mocha" 216 + set -g @catppuccin_window_status_style "rounded" 217 + ''; 218 + } 175 219 ]; 220 + 221 + extraConfig = '' 222 + set -ag terminal-overrides ",xterm-256color:RGB" 223 + ''; 176 224 }; 177 225 178 226 zsh = { 179 227 enable = true; 180 228 181 229 enableCompletion = true; 182 - enableAutosuggestions = true; 230 + autosuggestion.enable = true; 183 231 184 232 autocd = true; 185 233 ··· 189 237 190 238 plugins = [ 191 239 { 240 + name = "fzf-tab"; 241 + src = fzf-tab; 242 + } 243 + { 192 244 name = "nix-zsh-complete.zsh"; 193 245 src = zsh-complete; 194 246 file = "_nix"; 195 247 } 196 248 { 197 - name = "powerlevel10k"; 198 - src = pkgs.zsh-powerlevel10k; 199 - file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; 200 - } 201 - { 202 - name = "powerlevel10k-config"; 203 - src = lib.cleanSource ./p10k-config; 204 - file = "p10k.zsh"; 205 - } 206 - { 207 249 name = "zsh-syntax-highlighting"; 208 - src = pkgs.fetchFromGitHub { 209 - owner = "zsh-users"; 210 - repo = "zsh-syntax-highlighting"; 211 - rev = "0.7.1"; 212 - sha256 = "03r6hpb5fy4yaakqm3lbf4xcvd408r44jgpv4lnzl9asp4sb9qc0"; 213 - }; 250 + src = npins.zsh-syntax-highlighting; 214 251 } 215 252 ]; 216 253 217 - initExtra = '' 254 + initContent = '' 218 255 bindkey "^[[1;5D" backward-word 219 256 bindkey "^[[1;5C" forward-word 257 + 258 + ZSH_AUTOSUGGEST_STRATEGY=(completion history) 220 259 ''; 221 260 222 261 sessionVariables = { 223 - # NIX_PATH = builtins.concatStringsSep ":" [ 224 - # "nixpkgs=${inputs.nixpkgs}" 225 - # "nixos-config=/etc/nixos/configuration.nix" 226 - # "/nix/var/nix/profiles/per-user/root/channels" 227 - # ]; 262 + PROMPT_EOL_MARK = "%F{243}ยถ%f"; 228 263 }; 229 264 230 - shellAliases = config.programs.zshell.aliases; 265 + shellAliases.fixstore = "sudo nix-store --verify --check-contents --repair"; 266 + shellAliases.pq = "pueue"; 231 267 }; 232 268 }; 233 269 };
-1469
home/modules/profiles/base/p10k-config/p10k.zsh
··· 1 - # Generated by Powerlevel10k configuration wizard on 2020-02-27 at 13:48 UTC. 2 - # Based on romkatv/powerlevel10k/config/p10k-classic.zsh. 3 - # Wizard options: powerline, classic, darkest, time, angled separators, sharp heads, 4 - # flat tails, 2 lines, solid, full frame, compact, concise, transient_prompt, 5 - # instant_prompt=off. 6 - # Type `p10k configure` to generate another config. 7 - # 8 - # Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate 9 - # your own config based on it. 10 - # 11 - # Tip: Looking for a nice color? Here's a one-liner to print colormap. 12 - # 13 - # for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%8)):#7}:+$'\n'}; done 14 - 15 - # Temporarily change options. 16 - 'builtin' 'local' '-a' 'p10k_config_opts' 17 - [[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') 18 - [[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') 19 - [[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') 20 - 'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' 21 - 22 - () { 23 - emulate -L zsh 24 - setopt no_unset extended_glob 25 - 26 - # Unset all configuration options. This allows you to apply configiguration changes without 27 - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. 28 - unset -m 'POWERLEVEL9K_*' 29 - 30 - autoload -Uz is-at-least && is-at-least 5.1 || return 31 - 32 - zmodload zsh/langinfo 33 - if [[ ${langinfo[CODESET]:-} != (utf|UTF)(-|)8 ]]; then 34 - local LC_ALL=${${(@M)$(locale -a):#*.(utf|UTF)(-|)8}[1]:-en_US.UTF-8} 35 - fi 36 - 37 - # The list of segments shown on the left. Fill it with the most important segments. 38 - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( 39 - # =========================[ Line #1 ]========================= 40 - # os_icon # os identifier 41 - dir # current directory 42 - vcs # git status 43 - # =========================[ Line #2 ]========================= 44 - newline # \n 45 - # prompt_char # prompt symbol 46 - ) 47 - 48 - # The list of segments shown on the right. Fill it with less important segments. 49 - # Right prompt on the last prompt line (where you are typing your commands) gets 50 - # automatically hidden when the input line reaches it. Right prompt above the 51 - # last prompt line gets hidden if it would overlap with left prompt. 52 - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( 53 - # =========================[ Line #1 ]========================= 54 - status # exit code of the last command 55 - command_execution_time # duration of the last command 56 - background_jobs # presence of background jobs 57 - direnv # direnv status (https://direnv.net/) 58 - asdf # asdf version manager (https://github.com/asdf-vm/asdf) 59 - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) 60 - anaconda # conda environment (https://conda.io/) 61 - pyenv # python environment (https://github.com/pyenv/pyenv) 62 - goenv # go environment (https://github.com/syndbg/goenv) 63 - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) 64 - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) 65 - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) 66 - # node_version # node.js version 67 - # go_version # go version (https://golang.org) 68 - # rust_version # rustc version (https://www.rust-lang.org) 69 - # dotnet_version # .NET version (https://dotnet.microsoft.com) 70 - # php_version # php version (https://www.php.net/) 71 - # laravel_version # laravel php framework version (https://laravel.com/) 72 - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) 73 - rvm # ruby version from rvm (https://rvm.io) 74 - fvm # flutter version management (https://github.com/leoafarias/fvm) 75 - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) 76 - jenv # java version from jenv (https://github.com/jenv/jenv) 77 - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) 78 - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) 79 - kubecontext # current kubernetes context (https://kubernetes.io/) 80 - terraform # terraform workspace (https://www.terraform.io) 81 - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) 82 - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) 83 - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) 84 - gcloud # google cloud cli account and project (https://cloud.google.com/) 85 - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) 86 - context # user@hostname 87 - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) 88 - ranger # ranger shell (https://github.com/ranger/ranger) 89 - nnn # nnn shell (https://github.com/jarun/nnn) 90 - vim_shell # vim shell indicator (:sh) 91 - midnight_commander # midnight commander shell (https://midnight-commander.org/) 92 - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) 93 - vi_mode # vi mode (you don't need this if you've enabled prompt_char) 94 - # vpn_ip # virtual private network indicator 95 - # load # CPU load 96 - # disk_usage # disk usage 97 - # ram # free RAM 98 - # swap # used swap 99 - todo # todo items (https://github.com/todotxt/todo.txt-cli) 100 - timewarrior # timewarrior tracking status (https://timewarrior.net/) 101 - taskwarrior # taskwarrior task count (https://taskwarrior.org/) 102 - time # current time 103 - # =========================[ Line #2 ]========================= 104 - newline # \n 105 - # ip # ip address and bandwidth usage for a specified network interface 106 - # public_ip # public IP address 107 - # proxy # system-wide http/https/ftp proxy 108 - # battery # internal battery 109 - # wifi # wifi speed 110 - # example # example user-defined segment (see prompt_example function below) 111 - ) 112 - 113 - # To enable default icons for all segments, don't define POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION 114 - # or set it to '${P9K_VISUAL_IDENTIFIER}'. 115 - # 116 - # To remove trailing space from all default icons, set POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION 117 - # to '${P9K_VISUAL_IDENTIFIER% }'. 118 - # 119 - # To enable default icons for one segment (e.g., dir), set 120 - # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}'. 121 - # 122 - # To assign a specific icon to one segment (e.g., dir), set 123 - # POWERLEVEL9K_DIR_VISUAL_IDENTIFIER_EXPANSION='โญ'. 124 - # 125 - # To assign a specific icon to a segment in a given state (e.g., dir in state NOT_WRITABLE), 126 - # set POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='โญ'. 127 - # 128 - # Note: You can use $'\u2B50' instead of 'โญ'. It's especially convenient when specifying 129 - # icons that your text editor cannot render. Don't forget to put $ and use single quotes when 130 - # defining icons via Unicode codepoints. 131 - # 132 - # Note: Many default icons cannot be displayed with system fonts. You'll need to install a 133 - # capable font to use them. See POWERLEVEL9K_MODE below. 134 - typeset -g POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION='${P9K_VISUAL_IDENTIFIER}' 135 - 136 - # This option makes a difference only when default icons are enabled for all or some prompt 137 - # segments (see POWERLEVEL9K_VISUAL_IDENTIFIER_EXPANSION above). LOCK_ICON can be printed as 138 - # $'\uE0A2', $'\uE138' or $'\uF023' depending on POWERLEVEL9K_MODE. The correct value of this 139 - # parameter depends on the provider of the font your terminal is using. 140 - # 141 - # Font Provider | POWERLEVEL9K_MODE 142 - # ---------------------------------+------------------- 143 - # Powerline | powerline 144 - # Font Awesome | awesome-fontconfig 145 - # Adobe Source Code Pro | awesome-fontconfig 146 - # Source Code Pro | awesome-fontconfig 147 - # Awesome-Terminal Fonts (regular) | awesome-fontconfig 148 - # Awesome-Terminal Fonts (patched) | awesome-patched 149 - # Nerd Fonts | nerdfont-complete 150 - # Other | compatible 151 - # 152 - # If this looks overwhelming, either stick with a preinstalled system font and set 153 - # POWERLEVEL9K_MODE=compatible, or install the recommended Powerlevel10k font from 154 - # https://github.com/romkatv/powerlevel10k/#recommended-meslo-nerd-font-patched-for-powerlevel10k 155 - # and set POWERLEVEL9K_MODE=nerdfont-complete. 156 - typeset -g POWERLEVEL9K_MODE=powerline 157 - 158 - # When set to true, icons appear before content on both sides of the prompt. When set 159 - # to false, icons go after content. If empty or not set, icons go before content in the left 160 - # prompt and after content in the right prompt. 161 - # 162 - # You can also override it for a specific segment: 163 - # 164 - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false 165 - # 166 - # Or for a specific segment in specific state: 167 - # 168 - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false 169 - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= 170 - 171 - # Add an empty line before each prompt. 172 - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false 173 - 174 - # Connect left prompt lines with these symbols. You'll probably want to use the same color 175 - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. 176 - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%238Fโ•ญโ”€' 177 - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238Fโ”œโ”€' 178 - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238Fโ•ฐโ”€' 179 - # Connect right prompt lines with these symbols. 180 - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238Fโ”€โ•ฎ' 181 - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238Fโ”€โ”ค' 182 - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238Fโ”€โ•ฏ' 183 - 184 - # Filler between left and right prompt on the first prompt line. You can set it to ' ', 'ยท' or 185 - # 'โ”€'. The last two make it easier to see the alignment between left and right prompt and to 186 - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false 187 - # for more compact prompt if using using this option. 188 - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='โ”€' 189 - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= 190 - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then 191 - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE 192 - # ornaments defined above. 193 - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238 194 - # Start filler from the edge of the screen if there are no left segments on the first line. 195 - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' 196 - # End filler on the edge of the screen if there are no right segments on the first line. 197 - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' 198 - fi 199 - 200 - # Default background color. 201 - typeset -g POWERLEVEL9K_BACKGROUND=234 202 - 203 - # Separator between same-color segments on the left. 204 - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%242F\uE0B1' 205 - # Separator between same-color segments on the right. 206 - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%242F\uE0B3' 207 - # Separator between different-color segments on the left. 208 - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' 209 - # Separator between different-color segments on the right. 210 - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' 211 - # The right end of left prompt. 212 - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' 213 - # The left end of right prompt. 214 - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' 215 - # The left end of left prompt. 216 - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='' 217 - # The right end of right prompt. 218 - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='' 219 - # Left prompt terminator for lines without any segments. 220 - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= 221 - 222 - #################################[ os_icon: os identifier ]################################## 223 - # OS identifier color. 224 - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 225 - # Make the icon bold. 226 - typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='%B${P9K_CONTENT}' 227 - 228 - ################################[ prompt_char: prompt symbol ]################################ 229 - # Transparent background. 230 - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= 231 - # Green prompt symbol if the last command succeeded. 232 - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 233 - # Red prompt symbol if the last command failed. 234 - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 235 - # Default prompt symbol. 236 - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='โฏ' 237 - # Prompt symbol in command vi mode. 238 - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='โฎ' 239 - # Prompt symbol in visual vi mode. 240 - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='โ…ค' 241 - # Prompt symbol in overwrite vi mode. 242 - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='โ–ถ' 243 - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true 244 - # No line terminator if prompt_char is the last segment. 245 - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= 246 - # No line introducer if prompt_char is the first segment. 247 - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= 248 - # No surrounding whitespace. 249 - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= 250 - 251 - ##################################[ dir: current directory ]################################## 252 - # Default current directory color. 253 - typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 254 - # If directory is too long, shorten some of its segments to the shortest possible unique 255 - # prefix. The shortened directory can be tab-completed to the original. 256 - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique 257 - # Replace removed segment suffixes with this symbol. 258 - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= 259 - # Color of the shortened directory segments. 260 - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 261 - # Color of the anchor directory segments. Anchor segments are never shortened. The first 262 - # segment is always an anchor. 263 - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 264 - # Display anchor directory segments in bold. 265 - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true 266 - # Don't shorten directories that contain any of these files. They are anchors. 267 - local anchor_files=( 268 - .bzr 269 - .citc 270 - .git 271 - .hg 272 - .node-version 273 - .python-version 274 - .go-version 275 - .ruby-version 276 - .lua-version 277 - .java-version 278 - .perl-version 279 - .php-version 280 - .tool-version 281 - .shorten_folder_marker 282 - .svn 283 - .terraform 284 - CVS 285 - Cargo.toml 286 - composer.json 287 - go.mod 288 - package.json 289 - ) 290 - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" 291 - # If set to true, remove everything before the last (deepest) subdirectory that contains files 292 - # matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is 293 - # /foo/bar/git_repo/baz, prompt will display git_repo/baz. This assumes that /foo/bar/git_repo 294 - # contains a marker (.git) and other directories don't. 295 - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false 296 - # Don't shorten this many last directory segments. They are anchors. 297 - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 298 - # Shorten directory if it's longer than this even if there is space for it. The value can 299 - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, 300 - # directory will be shortened only when prompt doesn't fit or when other parameters demand it 301 - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). 302 - # If set to `0`, directory will always be shortened to its minimum length. 303 - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 304 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this 305 - # many columns for typing commands. 306 - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 307 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least 308 - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. 309 - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 310 - # If set to true, embed a hyperlink into the directory. Useful for quickly 311 - # opening a directory in the file manager simply by clicking the link. 312 - # Can also be handy when the directory is shortened, as it allows you to see 313 - # the full directory that was used in previous commands. 314 - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false 315 - 316 - # Enable special styling for non-writable directories. 317 - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=true 318 - # Show this icon when the current directory is not writable. POWERLEVEL9K_DIR_SHOW_WRITABLE 319 - # above must be set to true for this parameter to have effect. 320 - typeset -g POWERLEVEL9K_DIR_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='โˆ…' 321 - 322 - # Custom prefix. 323 - # typeset -g POWERLEVEL9K_DIR_PREFIX='%244Fin ' 324 - 325 - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons for different directories. 326 - # It must be an array with 3 * N elements. Each triplet consists of: 327 - # 328 - # 1. A pattern against which the current directory is matched. Matching is done with 329 - # extended_glob option enabled. 330 - # 2. Directory class for the purpose of styling. 331 - # 3. Icon. 332 - # 333 - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. If there 334 - # are no matches, the directory will have no icon. 335 - # 336 - # Example: 337 - # 338 - # typeset -g POWERLEVEL9K_DIR_CLASSES=( 339 - # '~/work(|/*)' WORK '(โ•ฏยฐโ–กยฐ๏ผ‰โ•ฏ๏ธต โ”ปโ”โ”ป' 340 - # '~(|/*)' HOME 'โŒ‚' 341 - # '*' DEFAULT '') 342 - # 343 - # With these settings, the current directory in the prompt may look like this: 344 - # 345 - # (โ•ฏยฐโ–กยฐ๏ผ‰โ•ฏ๏ธต โ”ปโ”โ”ป ~/work/projects/important/urgent 346 - # 347 - # Or like this: 348 - # 349 - # โŒ‚ ~/best/powerlevel10k 350 - # 351 - # You can also set different colors for directories of different classes. Remember to override 352 - # FOREGROUND, SHORTENED_FOREGROUND and ANCHOR_FOREGROUND for every directory class that you wish 353 - # to have its own color. 354 - # 355 - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 356 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 357 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 358 - # 359 - typeset -g POWERLEVEL9K_DIR_CLASSES=() 360 - 361 - #####################################[ vcs: git status ]###################################### 362 - # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. 363 - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= 364 - POWERLEVEL9K_VCS_BRANCH_ICON=${(g::)POWERLEVEL9K_VCS_BRANCH_ICON} 365 - 366 - # Untracked files icon. It's really a question mark, your font isn't broken. 367 - # Change the value of this parameter to show a different icon. 368 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' 369 - POWERLEVEL9K_VCS_UNTRACKED_ICON=${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON} 370 - 371 - # Formatter for Git status. 372 - # 373 - # Example output: master โ‡ฃ42โ‡ก42 *42 merge ~42 +42 !42 ?42. 374 - # 375 - # You can edit the function to customize how Git status looks. 376 - # 377 - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: 378 - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. 379 - function my_git_formatter() { 380 - emulate -L zsh 381 - 382 - if [[ -n $P9K_CONTENT ]]; then 383 - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from 384 - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. 385 - typeset -g my_git_format=$P9K_CONTENT 386 - return 387 - fi 388 - 389 - if (( $1 )); then 390 - # Styling for up-to-date Git status. 391 - local meta='%244F' # grey foreground 392 - local clean='%76F' # green foreground 393 - local modified='%178F' # yellow foreground 394 - local untracked='%39F' # blue foreground 395 - local conflicted='%196F' # red foreground 396 - else 397 - # Styling for incomplete and stale Git status. 398 - local meta='%244F' # grey foreground 399 - local clean='%244F' # grey foreground 400 - local modified='%244F' # grey foreground 401 - local untracked='%244F' # grey foreground 402 - local conflicted='%244F' # grey foreground 403 - fi 404 - 405 - local res 406 - local where # branch or tag 407 - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then 408 - res+="${clean}${POWERLEVEL9K_VCS_BRANCH_ICON}" 409 - where=${(V)VCS_STATUS_LOCAL_BRANCH} 410 - elif [[ -n $VCS_STATUS_TAG ]]; then 411 - res+="${meta}#" 412 - where=${(V)VCS_STATUS_TAG} 413 - fi 414 - 415 - # If local branch name or tag is at most 32 characters long, show it in full. 416 - # Otherwise show the first 12 โ€ฆ the last 12. 417 - (( $#where > 32 )) && where[13,-13]="โ€ฆ" 418 - res+="${clean}${where//\%/%%}" # escape % 419 - 420 - # Display the current Git commit if there is no branch or tag. 421 - # Tip: To always display the current Git commit, remove `[[ -z $where ]] &&` from the next line. 422 - [[ -z $where ]] && res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" 423 - 424 - # Show tracking branch name if it differs from local branch. 425 - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then 426 - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" # escape % 427 - fi 428 - 429 - # โ‡ฃ42 if behind the remote. 430 - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}โ‡ฃ${VCS_STATUS_COMMITS_BEHIND}" 431 - # โ‡ก42 if ahead of the remote; no leading space if also behind the remote: โ‡ฃ42โ‡ก42. 432 - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " 433 - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}โ‡ก${VCS_STATUS_COMMITS_AHEAD}" 434 - # โ‡ 42 if behind the push remote. 435 - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}โ‡ ${VCS_STATUS_PUSH_COMMITS_BEHIND}" 436 - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " 437 - # โ‡ข42 if ahead of the push remote; no leading space if also behind: โ‡ 42โ‡ข42. 438 - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}โ‡ข${VCS_STATUS_PUSH_COMMITS_AHEAD}" 439 - # *42 if have stashes. 440 - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" 441 - # 'merge' if the repo is in an unusual state. 442 - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" 443 - # ~42 if have merge conflicts. 444 - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" 445 - # +42 if have staged changes. 446 - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" 447 - # !42 if have unstaged changes. 448 - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" 449 - # ?42 if have untracked files. It's really a question mark, your font isn't broken. 450 - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. 451 - # Remove the next line if you don't want to see untracked files at all. 452 - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" 453 - # "โ”€" if the number of unstaged files is unknown. This can happen due to 454 - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower 455 - # than the number of files in the Git index, or due to bash.showDirtyState being set to false 456 - # in the repository config. The number of staged and untracked files may also be unknown 457 - # in this case. 458 - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}โ”€" 459 - 460 - typeset -g my_git_format=$res 461 - } 462 - functions -M my_git_formatter 2>/dev/null 463 - 464 - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with 465 - # more than this many files in the index. Negative value means infinity. 466 - # 467 - # If you are working in Git repositories with tens of millions of files and seeing performance 468 - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output 469 - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's 470 - # config: `git config bash.showDirtyState false`. 471 - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 472 - 473 - # Don't show Git status in prompt for repositories whose workdir matches this pattern. 474 - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. 475 - # Multiple patterns can be combined with '|': '~|~/some/dir'. 476 - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' 477 - 478 - # Disable the default Git status formatting. 479 - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true 480 - # Install our own Git status formatter. 481 - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' 482 - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' 483 - # Enable counters for staged, unstaged, etc. 484 - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 485 - 486 - # Icon color. 487 - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 488 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 489 - # Custom icon. 490 - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= 491 - # Custom prefix. 492 - # typeset -g POWERLEVEL9K_VCS_PREFIX='%244Fon ' 493 - 494 - # Show status of repositories of these types. You can add svn and/or hg if you are 495 - # using them. If you do, your prompt may become slow even when your current directory 496 - # isn't in an svn or hg reposotiry. 497 - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) 498 - 499 - # These settings are used for respositories other than Git or when gitstatusd fails and 500 - # Powerlevel10k has to fall back to using vcs_info. 501 - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 502 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 503 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 504 - 505 - ##########################[ status: exit code of the last command ]########################### 506 - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and 507 - # style them independently from the regular OK and ERROR state. 508 - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true 509 - 510 - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as 511 - # it will signify success by turning green. 512 - typeset -g POWERLEVEL9K_STATUS_OK=true 513 - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 514 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='โœ”' 515 - 516 - # Status when some part of a pipe command fails but the overall exit status is zero. It may look 517 - # like this: 1|0. 518 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true 519 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 520 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='โœ”' 521 - 522 - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as 523 - # it will signify error by turning red. 524 - typeset -g POWERLEVEL9K_STATUS_ERROR=true 525 - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 526 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 527 - 528 - # Status when the last command was terminated by a signal. 529 - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true 530 - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 531 - # Use terse signal names: "INT" instead of "SIGINT(2)". 532 - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false 533 - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 534 - 535 - # Status when some part of a pipe command fails and the overall exit status is also non-zero. 536 - # It may look like this: 1|0. 537 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true 538 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 539 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 540 - 541 - ###################[ command_execution_time: duration of the last command ]################### 542 - # Show duration of the last command if takes longer than this many seconds. 543 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 544 - # Show this many fractional digits. Zero means round to seconds. 545 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 546 - # Execution time color. 547 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 548 - # Duration format: 1d 2h 3m 4s. 549 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' 550 - # Custom icon. 551 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= 552 - # Custom prefix. 553 - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%244Ftook ' 554 - 555 - #######################[ background_jobs: presence of background jobs ]####################### 556 - # Don't show the number of background jobs. 557 - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false 558 - # Background jobs color. 559 - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 560 - # Custom icon. 561 - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='โ‰ก' 562 - 563 - #######################[ direnv: direnv status (https://direnv.net/) ]######################## 564 - # Direnv color. 565 - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 566 - # Custom icon. 567 - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 568 - 569 - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### 570 - # Default asdf color. Only used to display tools for which there is no color override (see below). 571 - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 572 - 573 - # There are four parameters that can be used to hide asdf tools. Each parameter describes 574 - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at 575 - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to 576 - # hide a tool, it gets shown. 577 - # 578 - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and 579 - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: 580 - # 581 - # asdf local python 3.8.1 582 - # asdf global python 3.8.1 583 - # 584 - # After running both commands the current python version is 3.8.1 and its source is "local" as 585 - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, 586 - # it'll hide python version in this case because 3.8.1 is the same as the global version. 587 - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't 588 - # contain "local". 589 - 590 - # Hide tool versions that don't come from one of these sources. 591 - # 592 - # Available sources: 593 - # 594 - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" 595 - # - local `asdf current` says "set by /some/not/home/directory/file" 596 - # - global `asdf current` says "set by /home/username/file" 597 - # 598 - # Note: If this parameter is set to (shell local global), it won't hide tools. 599 - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. 600 - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) 601 - 602 - # If set to false, hide tool versions that are the same as global. 603 - # 604 - # Note: The name of this parameter doesn't reflect its meaning at all. 605 - # Note: If this parameter is set to true, it won't hide tools. 606 - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. 607 - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false 608 - 609 - # If set to false, hide tool versions that are equal to "system". 610 - # 611 - # Note: If this parameter is set to true, it won't hide tools. 612 - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. 613 - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true 614 - 615 - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern 616 - # in the current directory, or its parent diretory, or its grandparent directory, and so on. 617 - # 618 - # Note: If this parameter is set to empty value, it won't hide tools. 619 - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. 620 - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. 621 - # 622 - # Example: Hide nodejs version when there is no package.json and no *.js files in the current 623 - # directory, in `..`, in `../..` and so on. 624 - # 625 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' 626 - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= 627 - 628 - # Ruby version from asdf. 629 - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 630 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='โญ' 631 - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' 632 - 633 - # Python version from asdf. 634 - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 635 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='โญ' 636 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' 637 - 638 - # Go version from asdf. 639 - typeset -g POWERLEVEL9K_ASDF_GO_FOREGROUND=37 640 - # typeset -g POWERLEVEL9K_ASDF_GO_VISUAL_IDENTIFIER_EXPANSION='โญ' 641 - # typeset -g POWERLEVEL9K_ASDF_GO_SHOW_ON_UPGLOB='*.foo|*.bar' 642 - 643 - # Node.js version from asdf. 644 - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 645 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='โญ' 646 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' 647 - 648 - # Rust version from asdf. 649 - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 650 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='โญ' 651 - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' 652 - 653 - # .NET Core version from asdf. 654 - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 655 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='โญ' 656 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' 657 - 658 - # Flutter version from asdf. 659 - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 660 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='โญ' 661 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' 662 - 663 - # Lua version from asdf. 664 - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 665 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='โญ' 666 - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' 667 - 668 - # Java version from asdf. 669 - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 670 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='โญ' 671 - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' 672 - 673 - # Perl version from asdf. 674 - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 675 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='โญ' 676 - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' 677 - 678 - # Erlang version from asdf. 679 - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 680 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='โญ' 681 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' 682 - 683 - # Elixir version from asdf. 684 - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 685 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='โญ' 686 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' 687 - 688 - # Postgres version from asdf. 689 - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 690 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='โญ' 691 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' 692 - 693 - # PHP version from asdf. 694 - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 695 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='โญ' 696 - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' 697 - 698 - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### 699 - # NordVPN connection indicator color. 700 - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 701 - # Hide NordVPN connection indicator when not connected. 702 - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= 703 - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= 704 - # Custom icon. 705 - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='โญ' 706 - 707 - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## 708 - # Ranger shell color. 709 - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 710 - # Custom icon. 711 - typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='โ–ฒ' 712 - 713 - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### 714 - # Nnn shell color. 715 - typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 716 - # Custom icon. 717 - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='โญ' 718 - 719 - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### 720 - # Vim shell indicator color. 721 - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 722 - # Custom icon. 723 - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='โญ' 724 - 725 - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### 726 - # Midnight Commander shell color. 727 - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 728 - # Custom icon. 729 - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='โญ' 730 - 731 - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## 732 - # Nix shell color. 733 - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 734 - 735 - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. 736 - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= 737 - 738 - # Custom icon. 739 - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='โญ' 740 - 741 - ##################################[ disk_usgae: disk usage ]################################## 742 - # Colors for different levels of disk usage. 743 - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 744 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 745 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 746 - # Thresholds for different levels of disk usage (percentage points). 747 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 748 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 749 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. 750 - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false 751 - # Custom icon. 752 - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='โญ' 753 - 754 - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### 755 - # Text and color for normal (a.k.a. command) vi mode. 756 - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL 757 - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 758 - # Text and color for visual vi mode. 759 - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL 760 - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 761 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. 762 - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE 763 - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 764 - # Text and color for insert vi mode. 765 - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= 766 - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 767 - 768 - # Custom icon. 769 - typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='โ–ฒ' 770 - 771 - ######################################[ ram: free RAM ]####################################### 772 - # RAM color. 773 - typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 774 - # Custom icon. 775 - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='โญ' 776 - 777 - #####################################[ swap: used swap ]###################################### 778 - # Swap color. 779 - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 780 - # Custom icon. 781 - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='โญ' 782 - 783 - ######################################[ load: CPU load ]###################################### 784 - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. 785 - typeset -g POWERLEVEL9K_LOAD_WHICH=5 786 - # Load color when load is under 50%. 787 - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 788 - # Load color when load is between 50% and 70%. 789 - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 790 - # Load color when load is over 70%. 791 - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 792 - # Custom icon. 793 - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='โญ' 794 - 795 - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ 796 - # Todo color. 797 - typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 798 - # Hide todo when the total number of tasks is zero. 799 - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true 800 - # Hide todo when the number of tasks after filtering is zero. 801 - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false 802 - 803 - # Todo format. The following parameters are available within the expansion. 804 - # 805 - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. 806 - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. 807 - # 808 - # These variables correspond to the last line of the output of `todo.sh -p ls`: 809 - # 810 - # TODO: 24 of 42 tasks shown 811 - # 812 - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. 813 - # 814 - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' 815 - 816 - # Custom icon. 817 - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='โญ' 818 - 819 - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ 820 - # Timewarrior color. 821 - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 822 - # If the tracked task is longer than 24 characters, truncate and append "โ€ฆ". 823 - # Tip: To always display tasks without truncation, delete the following parameter. 824 - # Tip: To hide task names and display just the icon when time tracking is enabled, set the 825 - # value of the following parameter to "". 826 - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+โ€ฆ}' 827 - 828 - # Custom icon. 829 - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='โญ' 830 - 831 - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## 832 - # Taskwarrior color. 833 - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 834 - 835 - # Taskwarrior segment format. The following parameters are available within the expansion. 836 - # 837 - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. 838 - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. 839 - # 840 - # Zero values are represented as empty parameters. 841 - # 842 - # The default format: 843 - # 844 - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' 845 - # 846 - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' 847 - 848 - # Custom icon. 849 - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='โญ' 850 - 851 - ##################################[ context: user@hostname ]################################## 852 - # Context color when running with privileges. 853 - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 854 - # Context color in SSH without privileges. 855 - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 856 - # Default context color (no privileges, no SSH). 857 - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 858 - 859 - # Context format when running with privileges: bold user@hostname. 860 - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' 861 - # Context format when in SSH without privileges: user@hostname. 862 - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' 863 - # Default context format (no privileges, no SSH): user@hostname. 864 - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' 865 - 866 - # Don't show context unless running with privileges or in SSH. 867 - # Tip: Remove the next line to always show context. 868 - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= 869 - 870 - # Custom icon. 871 - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='โญ' 872 - # Custom prefix. 873 - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%244Fwith ' 874 - 875 - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### 876 - # Python virtual environment color. 877 - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 878 - # Don't show Python version next to the virtual environment name. 879 - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false 880 - # Separate environment name from Python version only with a space. 881 - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= 882 - # Custom icon. 883 - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 884 - 885 - #####################[ anaconda: conda environment (https://conda.io/) ]###################### 886 - # Anaconda environment color. 887 - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 888 - # Don't show Python version next to the anaconda environment name. 889 - typeset -g POWERLEVEL9K_ANACONDA_SHOW_PYTHON_VERSION=false 890 - # Separate environment name from Python version only with a space. 891 - typeset -g POWERLEVEL9K_ANACONDA_{LEFT,RIGHT}_DELIMITER= 892 - # Custom icon. 893 - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='โญ' 894 - 895 - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ 896 - # Pyenv color. 897 - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 898 - # Hide python version if it doesn't come from one of these sources. 899 - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) 900 - # If set to false, hide python version if it's the same as global: 901 - # $(pyenv version-name) == $(pyenv global). 902 - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false 903 - # Custom icon. 904 - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 905 - 906 - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ 907 - # Goenv color. 908 - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 909 - # Hide go version if it doesn't come from one of these sources. 910 - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) 911 - # If set to false, hide go version if it's the same as global: 912 - # $(goenv version-name) == $(goenv global). 913 - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false 914 - # Custom icon. 915 - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 916 - 917 - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## 918 - # Nodenv color. 919 - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 920 - # Don't show node version if it's the same as global: $(nodenv version-name) == $(nodenv global). 921 - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false 922 - # Custom icon. 923 - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 924 - 925 - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### 926 - # Nvm color. 927 - typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 928 - # Custom icon. 929 - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 930 - 931 - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ 932 - # Nodeenv color. 933 - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 934 - # Don't show Node version next to the environment name. 935 - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false 936 - # Separate environment name from Node version only with a space. 937 - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= 938 - # Custom icon. 939 - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 940 - 941 - ##############################[ node_version: node.js version ]############################### 942 - # Node version color. 943 - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 944 - # Show node version only when in a directory tree containing package.json. 945 - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true 946 - # Custom icon. 947 - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 948 - 949 - #######################[ go_version: go version (https://golang.org) ]######################## 950 - # Go version color. 951 - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 952 - # Show go version only when in a go project subdirectory. 953 - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true 954 - # Custom icon. 955 - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 956 - 957 - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## 958 - # Rust version color. 959 - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 960 - # Show rust version only when in a rust project subdirectory. 961 - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true 962 - # Custom icon. 963 - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 964 - 965 - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ 966 - # .NET version color. 967 - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 968 - # Show .NET version only when in a .NET project subdirectory. 969 - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true 970 - # Custom icon. 971 - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 972 - 973 - #####################[ php_version: php version (https://www.php.net/) ]###################### 974 - # PHP version color. 975 - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 976 - # Show PHP version only when in a PHP project subdirectory. 977 - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true 978 - # Custom icon. 979 - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 980 - 981 - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### 982 - # Laravel version color. 983 - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 984 - # Custom icon. 985 - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 986 - 987 - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## 988 - # Rbenv color. 989 - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 990 - # Hide ruby version if it doesn't come from one of these sources. 991 - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) 992 - # If set to false, hide ruby version if it's the same as global: 993 - # $(rbenv version-name) == $(rbenv global). 994 - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false 995 - # Custom icon. 996 - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 997 - 998 - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## 999 - # Rvm color. 1000 - typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 1001 - # Don't show @gemset at the end. 1002 - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false 1003 - # Don't show ruby- at the front. 1004 - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false 1005 - # Custom icon. 1006 - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 1007 - 1008 - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ 1009 - # Fvm color. 1010 - typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 1011 - # Custom icon. 1012 - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 1013 - 1014 - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### 1015 - # Lua color. 1016 - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 1017 - # Hide lua version if it doesn't come from one of these sources. 1018 - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) 1019 - # If set to false, hide lua version if it's the same as global: 1020 - # $(luaenv version-name) == $(luaenv global). 1021 - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false 1022 - # Custom icon. 1023 - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1024 - 1025 - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ 1026 - # Java color. 1027 - typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 1028 - # Hide java version if it doesn't come from one of these sources. 1029 - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) 1030 - # If set to false, hide java version if it's the same as global: 1031 - # $(jenv version-name) == $(jenv global). 1032 - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false 1033 - # Custom icon. 1034 - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1035 - 1036 - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ 1037 - # Perl color. 1038 - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 1039 - # Hide perl version if it doesn't come from one of these sources. 1040 - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) 1041 - # If set to false, hide perl version if it's the same as global: 1042 - # $(plenv version-name) == $(plenv global). 1043 - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false 1044 - # Custom icon. 1045 - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1046 - 1047 - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ 1048 - # PHP color. 1049 - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 1050 - # Hide php version if it doesn't come from one of these sources. 1051 - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) 1052 - # If set to false, hide php version if it's the same as global: 1053 - # $(phpenv version-name) == $(phpenv global). 1054 - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false 1055 - # Custom icon. 1056 - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1057 - 1058 - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# 1059 - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element 1060 - # in each pair defines a pattern against which the current terraform workspace gets matched. 1061 - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1062 - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, 1063 - # you'll see this value in your prompt. The second element of each pair in 1064 - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The 1065 - # first match wins. 1066 - # 1067 - # For example, given these settings: 1068 - # 1069 - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1070 - # '*prod*' PROD 1071 - # '*test*' TEST 1072 - # '*' DEFAULT) 1073 - # 1074 - # If your current terraform workspace is "project_test", its class is TEST because "project_test" 1075 - # doesn't match the pattern '*prod*' but does match '*test*'. 1076 - # 1077 - # You can define different colors, icons and content expansions for different classes: 1078 - # 1079 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 1080 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1081 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1082 - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1083 - # '*prod*' PROD # These values are examples that are unlikely 1084 - # '*test*' TEST # to match your needs. Customize them as needed. 1085 - '*' DEFAULT) 1086 - typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_FOREGROUND=38 1087 - # typeset -g POWERLEVEL9K_TERRAFORM_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โญ' 1088 - 1089 - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# 1090 - # Show kubecontext only when the the command you are typing invokes one of these tools. 1091 - # Tip: Remove the next line to always show kubecontext. 1092 - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc' 1093 - 1094 - # Kubernetes context classes for the purpose of using different colors, icons and expansions with 1095 - # different contexts. 1096 - # 1097 - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element 1098 - # in each pair defines a pattern against which the current kubernetes context gets matched. 1099 - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1100 - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, 1101 - # you'll see this value in your prompt. The second element of each pair in 1102 - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The 1103 - # first match wins. 1104 - # 1105 - # For example, given these settings: 1106 - # 1107 - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1108 - # '*prod*' PROD 1109 - # '*test*' TEST 1110 - # '*' DEFAULT) 1111 - # 1112 - # If your current kubernetes context is "deathray-testing/default", its class is TEST 1113 - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. 1114 - # 1115 - # You can define different colors, icons and content expansions for different classes: 1116 - # 1117 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 1118 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1119 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1120 - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1121 - # '*prod*' PROD # These values are examples that are unlikely 1122 - # '*test*' TEST # to match your needs. Customize them as needed. 1123 - '*' DEFAULT) 1124 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 1125 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โ—‹' 1126 - 1127 - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext 1128 - # segment. Parameter expansions are very flexible and fast, too. See reference: 1129 - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1130 - # 1131 - # Within the expansion the following parameters are always available: 1132 - # 1133 - # - P9K_CONTENT The content that would've been displayed if there was no content 1134 - # expansion defined. 1135 - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the 1136 - # output of `kubectl config get-contexts`. 1137 - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the 1138 - # output of `kubectl config get-contexts`. 1139 - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE 1140 - # in the output of `kubectl config get-contexts`. If there is no 1141 - # namespace, the parameter is set to "default". 1142 - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the 1143 - # output of `kubectl config get-contexts`. 1144 - # 1145 - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), 1146 - # the following extra parameters are available: 1147 - # 1148 - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". 1149 - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. 1150 - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. 1151 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. 1152 - # 1153 - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, 1154 - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": 1155 - # 1156 - # - P9K_KUBECONTEXT_CLOUD_NAME=gke 1157 - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account 1158 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a 1159 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1160 - # 1161 - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": 1162 - # 1163 - # - P9K_KUBECONTEXT_CLOUD_NAME=eks 1164 - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 1165 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 1166 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1167 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= 1168 - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. 1169 - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' 1170 - # Append the current context's namespace if it's not "default". 1171 - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' 1172 - 1173 - # Custom prefix. 1174 - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%244Fat ' 1175 - 1176 - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# 1177 - # Show aws only when the the command you are typing invokes one of these tools. 1178 - # Tip: Remove the next line to always show aws. 1179 - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi' 1180 - 1181 - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element 1182 - # in each pair defines a pattern against which the current AWS profile gets matched. 1183 - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1184 - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, 1185 - # you'll see this value in your prompt. The second element of each pair in 1186 - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The 1187 - # first match wins. 1188 - # 1189 - # For example, given these settings: 1190 - # 1191 - # typeset -g POWERLEVEL9K_AWS_CLASSES=( 1192 - # '*prod*' PROD 1193 - # '*test*' TEST 1194 - # '*' DEFAULT) 1195 - # 1196 - # If your current AWS profile is "company_test", its class is TEST 1197 - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. 1198 - # 1199 - # You can define different colors, icons and content expansions for different classes: 1200 - # 1201 - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 1202 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1203 - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1204 - typeset -g POWERLEVEL9K_AWS_CLASSES=( 1205 - # '*prod*' PROD # These values are examples that are unlikely 1206 - # '*test*' TEST # to match your needs. Customize them as needed. 1207 - '*' DEFAULT) 1208 - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 1209 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โญ' 1210 - 1211 - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# 1212 - # AWS Elastic Beanstalk environment color. 1213 - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 1214 - # Custom icon. 1215 - typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='eb' 1216 - 1217 - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## 1218 - # Show azure only when the the command you are typing invokes one of these tools. 1219 - # Tip: Remove the next line to always show azure. 1220 - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi' 1221 - # Azure account name color. 1222 - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 1223 - # Custom icon. 1224 - typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='az' 1225 - 1226 - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### 1227 - # Show gcloud only when the the command you are typing invokes one of these tools. 1228 - # Tip: Remove the next line to always show gcloud. 1229 - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs' 1230 - # Google cloud color. 1231 - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 1232 - 1233 - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION if the default 1234 - # is too verbose or not informative enough. 1235 - # 1236 - # P9K_GCLOUD_ACCOUNT: the output of `gcloud config get-value account` 1237 - # P9K_GCLOUD_PROJECT: the output of `gcloud config get-value project` 1238 - # ${VARIABLE//\%/%%}: ${VARIABLE} with all occurences of '%' replaced with '%%'. 1239 - # 1240 - typeset -g POWERLEVEL9K_GCLOUD_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT//\%/%%}' 1241 - 1242 - # Custom icon. 1243 - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='โญ' 1244 - 1245 - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# 1246 - # Show google_app_cred only when the the command you are typing invokes one of these tools. 1247 - # Tip: Remove the next line to always show google_app_cred. 1248 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi' 1249 - 1250 - # Google application credentials classes for the purpose of using different colors, icons and 1251 - # expansions with different credentials. 1252 - # 1253 - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first 1254 - # element in each pair defines a pattern against which the current kubernetes context gets 1255 - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion 1256 - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION 1257 - # parameters, you'll see this value in your prompt. The second element of each pair in 1258 - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. 1259 - # The first match wins. 1260 - # 1261 - # For example, given these settings: 1262 - # 1263 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1264 - # '*:*prod*:*' PROD 1265 - # '*:*test*:*' TEST 1266 - # '*' DEFAULT) 1267 - # 1268 - # If your current Google application credentials is "service_account deathray-testing x@y.com", 1269 - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. 1270 - # 1271 - # You can define different colors, icons and content expansions for different classes: 1272 - # 1273 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 1274 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1275 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' 1276 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1277 - # '*:*prod*:*' PROD # These values are examples that are unlikely 1278 - # '*:*test*:*' TEST # to match your needs. Customize them as needed. 1279 - '*' DEFAULT) 1280 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 1281 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โญ' 1282 - 1283 - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by 1284 - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: 1285 - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1286 - # 1287 - # You can use the following parameters in the expansion. Each of them corresponds to one of the 1288 - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. 1289 - # 1290 - # Parameter | JSON key file field 1291 - # ---------------------------------+--------------- 1292 - # P9K_GOOGLE_APP_CRED_TYPE | type 1293 - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id 1294 - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email 1295 - # 1296 - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurences of '%' replaced by '%%'. 1297 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' 1298 - 1299 - ###############################[ public_ip: public IP address ]############################### 1300 - # Public IP color. 1301 - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 1302 - # Custom icon. 1303 - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1304 - 1305 - ########################[ vpn_ip: virtual private network indicator ]######################### 1306 - # VPN IP color. 1307 - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 1308 - # When on VPN, show just an icon without the IP address. 1309 - # Tip: To display the private IP address when on VPN, remove the next line. 1310 - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= 1311 - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN 1312 - # to see the name of the interface. 1313 - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(wg|(.*tun))[0-9]*' 1314 - # If set to true, show one segment per matching network interface. If set to false, show only 1315 - # one segment corresponding to the first matching network interface. 1316 - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. 1317 - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false 1318 - # Custom icon. 1319 - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1320 - 1321 - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### 1322 - # IP color. 1323 - typeset -g POWERLEVEL9K_IP_FOREGROUND=38 1324 - # The following parameters are accessible within the expansion: 1325 - # 1326 - # Parameter | Meaning 1327 - # ----------------------+--------------- 1328 - # P9K_IP_IP | IP address 1329 - # P9K_IP_INTERFACE | network interface 1330 - # P9K_IP_RX_BYTES | total number of bytes received 1331 - # P9K_IP_TX_BYTES | total number of bytes sent 1332 - # P9K_IP_RX_RATE | receive rate (since last prompt) 1333 - # P9K_IP_TX_RATE | send rate (since last prompt) 1334 - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70Fโ‡ฃ$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215Fโ‡ก$P9K_IP_TX_RATE }%38F$P9K_IP_IP' 1335 - # Show information for the first network interface whose name matches this regular expression. 1336 - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. 1337 - typeset -g POWERLEVEL9K_IP_INTERFACE='e.*' 1338 - # Custom icon. 1339 - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1340 - 1341 - #########################[ proxy: system-wide http/https/ftp proxy ]########################## 1342 - # Proxy color. 1343 - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 1344 - # Custom icon. 1345 - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='โญ' 1346 - 1347 - ################################[ battery: internal battery ]################################# 1348 - # Show battery in red when it's below this level and not connected to power supply. 1349 - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 1350 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 1351 - # Show battery in green when it's charging or fully charged. 1352 - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 1353 - # Show battery in yellow when it's discharging. 1354 - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 1355 - # Battery pictograms going from low to high level of charge. 1356 - typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}โ–' '%K{232}โ–‚' '%K{232}โ–ƒ' '%K{232}โ–„' '%K{232}โ–…' '%K{232}โ–†' '%K{232}โ–‡' '%K{232}โ–ˆ') 1357 - # Don't show the remaining time to charge/discharge. 1358 - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false 1359 - 1360 - #####################################[ wifi: wifi speed ]##################################### 1361 - # WiFi color. 1362 - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 1363 - # Custom icon. 1364 - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='โญ' 1365 - 1366 - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). 1367 - # 1368 - # # Wifi colors and icons for different signal strength levels (low to high). 1369 - # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values 1370 - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values 1371 - # 1372 - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' 1373 - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' 1374 - # 1375 - # The following parameters are accessible within the expansions: 1376 - # 1377 - # Parameter | Meaning 1378 - # ----------------------+--------------- 1379 - # P9K_WIFI_SSID | service set identifier, a.k.a. network name 1380 - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none" 1381 - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second 1382 - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 1383 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 1384 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) 1385 - # 1386 - # All parameters except P9K_WIFI_BARS are extracted from the output of the following command: 1387 - # 1388 - # /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I 1389 - 1390 - ####################################[ time: current time ]#################################### 1391 - # Current time color. 1392 - typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 1393 - # Format for the current time: 09:51:02. See `man 3 strftime`. 1394 - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' 1395 - # If set to true, time will update when you hit enter. This way prompts for the past 1396 - # commands will contain the start times of their commands as opposed to the default 1397 - # behavior where they contain the end times of their preceding commands. 1398 - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false 1399 - # Custom icon. 1400 - typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= 1401 - # Custom prefix. 1402 - # typeset -g POWERLEVEL9K_TIME_PREFIX='%244Fat ' 1403 - 1404 - # Example of a user-defined prompt segment. Function prompt_example will be called on every 1405 - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or 1406 - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. 1407 - # 1408 - # Type `p10k help segment` for documentation and a more sophisticated example. 1409 - function prompt_example() { 1410 - p10k segment -f 208 -i 'โญ' -t 'hello, %n' 1411 - } 1412 - 1413 - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job 1414 - # is to generate the prompt segment for display in instant prompt. See 1415 - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1416 - # 1417 - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function 1418 - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k 1419 - # will replay these calls without actually calling instant_prompt_*. It is imperative that 1420 - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this 1421 - # rule is not observed, the content of instant prompt will be incorrect. 1422 - # 1423 - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If 1424 - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. 1425 - function instant_prompt_example() { 1426 - # Since prompt_example always makes the same `p10k segment` calls, we can call it from 1427 - # instant_prompt_example. This will give us the same `example` prompt segment in the instant 1428 - # and regular prompts. 1429 - prompt_example 1430 - } 1431 - 1432 - # User-defined prompt segments can be customized the same way as built-in segments. 1433 - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 1434 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='โญ' 1435 - 1436 - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt 1437 - # when accepting a command line. Supported values: 1438 - # 1439 - # - off: Don't change prompt when accepting a command line. 1440 - # - always: Trim down prompt when accepting a command line. 1441 - # - same-dir: Trim down prompt when accepting a command line unless this is the first command 1442 - # typed after changing current working directory. 1443 - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always 1444 - 1445 - # Instant prompt mode. 1446 - # 1447 - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found 1448 - # it incompatible with your zsh configuration files. 1449 - # - quiet: Enable instant prompt and don't print warnings when detecting console output 1450 - # during zsh initialization. Choose this if you've read and understood 1451 - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1452 - # - verbose: Enable instant prompt and print a warning when detecting console output during 1453 - # zsh initialization. Choose this if you've never tried instant prompt, haven't 1454 - # seen the warning, or if you are unsure what this all means. 1455 - typeset -g POWERLEVEL9K_INSTANT_PROMPT=off 1456 - 1457 - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. 1458 - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload 1459 - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you 1460 - # really need it. 1461 - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true 1462 - 1463 - # If p10k is already loaded, reload configuration. 1464 - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. 1465 - (( ! $+functions[p10k] )) || p10k reload 1466 - } 1467 - 1468 - (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} 1469 - 'builtin' 'unset' 'p10k_config_opts'
+2 -2
home/modules/profiles/browsing/default.nix
··· 1 - _: { 1 + {self, ...}: { 2 2 config, 3 3 lib, 4 4 pkgs, ··· 14 14 15 15 config = lib.mkIf cfg.enable { 16 16 nixpkgs.config = {google-chrome = {enableWideVine = true;};}; 17 - home.packages = with pkgs; [google-chrome lynx]; 17 + home.packages = with pkgs; [self.packages.${pkgs.system}.google-chrome lynx]; 18 18 }; 19 19 }
+4 -1
home/modules/profiles/default.nix
··· 8 8 in 9 9 builtins.foldl' reducer {} config.activeProfiles; 10 10 in { 11 - options.activeProfiles = lib.mkOption {type = lib.types.listOf lib.types.str;}; 11 + options.activeProfiles = lib.mkOption { 12 + type = lib.types.listOf lib.types.str; 13 + default = []; 14 + }; 12 15 13 16 config.profiles = profileEnabler; 14 17 }
+120 -15
home/modules/profiles/development/default.nix
··· 13 13 }; 14 14 15 15 config = lib.mkIf cfg.enable { 16 - programs.emacs = { 17 - extraPackages = ep: [ep.magit]; 18 - extraInit = '' 19 - ;; prepare magit use from shell 20 - (require 'magit) 21 - (global-git-commit-mode) 16 + programs.jujutsu = { 17 + enable = true; 18 + settings = { 19 + user = { 20 + name = config.programs.git.userName; 21 + email = config.programs.git.userEmail; 22 + }; 22 23 23 - ;; let magit autorefresh on file save within emacs 24 - (add-hook 'after-save-hook 'magit-after-save-refresh-status t) 25 - ''; 24 + ui.diff.tool = [config.programs.git.extraConfig.diff.external "$left" "$right"]; 25 + }; 26 26 }; 27 27 28 28 programs.gh.enable = true; ··· 32 32 userName = "Norbert Melzer"; 33 33 userEmail = "timmelzer@gmail.com"; 34 34 35 - aliases = { 35 + aliases = let 36 + mkFixupAlias = command: 37 + pkgs.resholve.writeScript "git-${command}" { 38 + inputs = builtins.attrValues {inherit (pkgs) git fzf ripgrep;}; 39 + interpreter = "${pkgs.bash}/bin/bash"; 40 + execer = ["cannot:${pkgs.git}/bin/git" "cannot:${pkgs.fzf}/bin/fzf"]; 41 + } 42 + # bash 43 + '' 44 + git log --graph --color=always --format="%C(auto)%h%d %s0x09%C(white)%C(bold)%cr" "$@" | 45 + fzf --ansi --no-sort --reverse --tiebreak=index \ 46 + --bind=ctrl-s:toggle-sort \ 47 + --bind="ctrl-m:execute:(rg -o '\b[a-f0-9]{6,}\b' | head -1 | xargs -I% sh -c 'git commit --${command}=% | less -R') <<FZF-EOF 48 + {} 49 + FZF-EOF" 50 + ''; 51 + gitSwitchFzf = 52 + pkgs.resholve.writeScript "git-switch-fzf" { 53 + inputs = builtins.attrValues {inherit (pkgs) git fzf coreutils gawk;}; 54 + interpreter = "${pkgs.bash}/bin/bash"; 55 + execer = ["cannot:${pkgs.git}/bin/git" "cannot:${pkgs.fzf}/bin/fzf"]; 56 + } 57 + # bash 58 + '' 59 + # Function to determine the ref type 60 + function get_ref_type() { 61 + local ref="$1" 62 + if git show-ref --verify --quiet refs/heads/"$ref"; then 63 + echo "branch" 64 + elif git show-ref --verify --quiet refs/tags/"$ref"; then 65 + echo "tag" 66 + elif git rev-parse --verify --quiet "$ref" >/dev/null; then 67 + echo "commit" 68 + else 69 + echo "unknown" 70 + fi 71 + } 72 + 73 + # Function to select a ref using fzf 74 + function select_ref_with_fzf() { 75 + cat <(git branch --format='%(refname:short) [branch]') \ 76 + <(git tag --format='%(refname:short) [tag]') \ 77 + <(git log --pretty=format:'%h %s [commit]') \ 78 + | fzf 79 + } 80 + 81 + # If the first argument is -c or -C, forward the arguments as-is to git switch 82 + if [ "$#" -ge 2 ] && ([[ "$1" == "-c" ]] || [[ "$1" == "-C" ]]); then 83 + git switch "$@" 84 + else 85 + # If an argument is provided and it's not -c or -C, switch to the specified ref 86 + if [ "$#" -eq 1 ]; then 87 + ref_name="$1" 88 + ref_type=$(get_ref_type "$ref_name") 89 + 90 + if [ "$ref_type" == "unknown" ]; then 91 + echo "Invalid ref: $ref_name" >&2 92 + exit 1 93 + fi 94 + else 95 + # If no argument or only -c/-C is provided, use the fzf selection interface to select a ref 96 + selected_ref=$(select_ref_with_fzf) 97 + 98 + # Extract the ref name and type from the selected_ref string 99 + ref_name=$(echo "$selected_ref" | awk '{print $1}') 100 + ref_type=$(echo "$selected_ref" | awk '{print $NF}' | tr -d '[]') 101 + fi 102 + 103 + # Based on the ref type, issue the appropriate git switch command 104 + case "$ref_type" in 105 + branch) 106 + git switch "$ref_name" 107 + ;; 108 + tag) 109 + git switch --detach "$ref_name" 110 + ;; 111 + commit) 112 + git switch --detach "$ref_name" 113 + ;; 114 + *) 115 + # If an invalid ref type is encountered, print an error message and exit 116 + echo "Invalid ref type: $ref_type" >&2 117 + exit 1 118 + ;; 119 + esac 120 + fi 121 + ''; 122 + in { 123 + br = "branch"; 124 + co = "checkout"; 125 + vommit = "commit"; 126 + vomit = "commit"; 36 127 graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold cyan)%h%C(reset) - %C(green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"; 37 - co = "checkout"; 38 - br = "branch"; 39 - st = "status"; 40 - ps = "push"; 41 128 pl = "pull"; 129 + ps = "push"; 130 + psf = "push --force-with-lease"; 42 131 root = "rev-parse --show-toplevel"; 132 + st = "status"; 133 + sw = "!${gitSwitchFzf}"; 134 + swag = ''!f() { if [ -z "$1" ]; then tag=$(git describe --abbrev=0 --tag); else tag=$(git describe --abbrev=0 --tag "$1"); fi; git switch --detach "''${tag}"; }; f''; 135 + hopbase = ''!f() { set -o nounset; tag=$(git describe --abbrev=0 --tag "$1") && git rebase -i "''${tag}"; }; f''; 136 + comfix = "!${mkFixupAlias "fixup"}"; 137 + comreb = "!${mkFixupAlias "rebase"}"; 138 + show = "show --ext-diff"; 139 + lp = "log -p --ext-diff"; 43 140 }; 44 141 45 142 extraConfig = { 46 143 init.defaultBranch = "main"; 144 + diff.external = lib.getExe pkgs.difftastic; 47 145 pull.rebase = false; 146 + rerere.enabled = true; 48 147 }; 49 148 50 149 ignores = [ ··· 78 177 user.email = "norbert.melzer@cloudseeds.de"; 79 178 }; 80 179 } 180 + { 181 + condition = "gitdir:~/Projects/BravoBike/**"; 182 + contents = { 183 + user.email = "norbert.melzer@bravobike.de"; 184 + }; 185 + } 81 186 ]; 82 187 }; 83 188 84 - home.packages = [pkgs.ripgrep]; 189 + home.packages = [pkgs.ripgrep pkgs.difftastic]; 85 190 }; 86 191 }
-62
home/modules/profiles/home-office/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.profiles.home-office; 8 - in { 9 - options.profiles.home-office = { 10 - enable = 11 - lib.mkEnableOption 12 - "A profile that enables remote desktop to the workingplace"; 13 - 14 - user = lib.mkOption { 15 - type = lib.types.nullOr lib.types.str; 16 - default = ""; 17 - example = "jon.doe"; 18 - description = '' 19 - The username used to login to the RDP host 20 - ''; 21 - }; 22 - 23 - pass = lib.mkOption { 24 - type = lib.types.nullOr lib.types.str; 25 - default = ""; 26 - example = "secret"; 27 - description = '' 28 - The password used to login to the RDP host 29 - ''; 30 - }; 31 - 32 - domain = lib.mkOption { 33 - type = lib.types.nullOr lib.types.str; 34 - default = ""; 35 - example = "secret"; 36 - description = '' 37 - The domain used to login to the RDP host 38 - ''; 39 - }; 40 - 41 - host = lib.mkOption { 42 - type = lib.types.nullOr lib.types.str; 43 - default = ""; 44 - example = "example.com"; 45 - description = '' 46 - The hostname or IP of the RDP host 47 - ''; 48 - }; 49 - }; 50 - 51 - config = lib.mkIf cfg.enable { 52 - # TODO: add assertions for `user`, `pass`, and `host` beeing set. 53 - 54 - home.packages = [ 55 - (pkgs.writeShellScriptBin "home-office" '' 56 - ${pkgs.freerdp}/bin/xfreerdp '/u:${cfg.user}' '/p:${cfg.pass}' '/d:${cfg.domain}' '/v:${cfg.host}' /dynamic-resolution 57 - '') 58 - 59 - pkgs.teamspeak_client 60 - ]; 61 - }; 62 - }
+2 -2
home/modules/programs/advcp/default.nix
··· 11 11 }; 12 12 13 13 config = lib.mkIf cfg.enable { 14 - home.packages = [self.packages.x86_64-linux.advcp]; 14 + home.packages = [self.packages.${pkgs.system}.advcp]; 15 15 16 - programs.zshell.aliases = { 16 + programs.zsh.shellAliases = { 17 17 cp = "advcp -g"; 18 18 mv = "advmv -g"; 19 19 };
-31
home/modules/programs/emacs/beacon.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.programs.emacs.packages.beacon; 7 - in { 8 - options.programs.emacs.packages.beacon = { 9 - enable = lib.mkOption { 10 - type = lib.types.bool; 11 - default = true; 12 - description = '' 13 - Enable `beacon' for emacs. 14 - ''; 15 - }; 16 - }; 17 - 18 - config = lib.mkIf cfg.enable { 19 - programs.emacs.localPackages."init-beacon" = { 20 - tag = "Setup beacon"; 21 - comments = []; 22 - requires = []; 23 - code = '' 24 - ;; enable the beacon minor mode globally. 25 - (beacon-mode 1) 26 - ''; 27 - }; 28 - 29 - programs.emacs.extraPackages = ep: [ep.beacon]; 30 - }; 31 - }
-39
home/modules/programs/emacs/company.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: 6 - with lib; let 7 - # emacs = config.programs.emacs; 8 - inherit (config.programs) emacs; 9 - in { 10 - config = lib.mkIf emacs.enable { 11 - programs.emacs.extraPackages = ep: [ep.company]; 12 - 13 - programs.emacs.localPackages."init-company" = { 14 - tag = "Setup and initialise company"; 15 - comments = []; 16 - requires = []; 17 - code = '' 18 - ;; company 19 - (setq tab-always-indent 'complete) 20 - (add-to-list 'completion-styles 'initials t) 21 - 22 - ;; (eval-when-compile (require 'company)) 23 - 24 - (add-hook 'after-init-hook 'global-company-mode) 25 - (with-eval-after-load 'company 26 - 27 - ;; (diminish 'company-mode "CMP") 28 - (define-key company-mode-map (kbd "M-+") '("complete" . 'company-complete)) 29 - (define-key company-active-map (kbd "M-+") '("change backend" . 'company-other-backend)) 30 - (define-key company-active-map (kbd "C-n") '("next" . 'company-select-next)) 31 - (define-key company-active-map (kbd "C-p") '("previous" . 'company-select-previous)) 32 - (setq-default company-dabbrev-other-buffers 'all 33 - company-tooltip-align-annotations t 34 - company-minimum-prefix-length 1 35 - company-idle-delay 0.05)) 36 - ''; 37 - }; 38 - }; 39 - }
-179
home/modules/programs/emacs/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - emacsEnabled = config.programs.emacs.enable; 8 - cfg = config.programs.emacs; 9 - 10 - bool2Lisp = b: 11 - if b 12 - then "t" 13 - else "nil"; 14 - 15 - confPackages = let 16 - fileContent = 17 - lib.attrsets.mapAttrs' 18 - (k: v: { 19 - name = "${k}"; 20 - value = { 21 - ep = v.packageRequires; 22 - src = 23 - config.lib.emacs.generatePackage k v.tag v.comments v.requires 24 - v.code; 25 - }; 26 - }) 27 - cfg.localPackages; 28 - derivations = 29 - lib.attrsets.mapAttrs 30 - (k: v: { 31 - # ep = v.ep; 32 - inherit (v) ep; 33 - src = pkgs.writeText "${k}.el" v.src; 34 - }) 35 - fileContent; 36 - in 37 - derivations; 38 - 39 - lispRequires = let 40 - names = lib.attrsets.mapAttrsToList (n: _: n) cfg.localPackages; 41 - sorted = builtins.sort (l: r: l < r) names; 42 - required = builtins.map (r: "(require '${r})") sorted; 43 - in 44 - builtins.concatStringsSep "\n" required; 45 - in { 46 - options.programs.emacs = { 47 - splashScreen = lib.mkOption { 48 - type = lib.types.bool; 49 - default = true; 50 - example = false; 51 - description = '' 52 - Enable the startup screen. 53 - ''; 54 - }; 55 - 56 - localPackages = lib.mkOption { 57 - type = lib.types.attrsOf (lib.types.submodule (_: { 58 - options = { 59 - tag = lib.mkOption {type = lib.types.str;}; 60 - comments = lib.mkOption {type = lib.types.listOf lib.types.str;}; 61 - requires = lib.mkOption {type = lib.types.listOf lib.types.str;}; 62 - code = lib.mkOption {type = lib.types.str;}; 63 - packageRequires = lib.mkOption { 64 - type = lib.types.unspecified; 65 - default = _: []; 66 - }; 67 - }; 68 - })); 69 - }; 70 - 71 - extraInit = lib.mkOption { 72 - type = lib.types.lines; 73 - default = ""; 74 - description = '' 75 - Extra preferences to add to <filename>init.el</filename>. 76 - ''; 77 - }; 78 - 79 - module = lib.mkOption { 80 - description = "Attribute set of modules to link into emacs configuration"; 81 - default = {}; 82 - }; 83 - }; 84 - 85 - config = lib.mkIf emacsEnabled { 86 - programs.emacs.extraInit = '' 87 - ;; adjust the load-path to find further down required files 88 - (add-to-list 'load-path 89 - (expand-file-name "lisp" user-emacs-directory)) 90 - 91 - (fset 'yes-or-no-p 'y-or-n-p) 92 - 93 - ;; Move backups and autosaves out of the way 94 - (setq backup-directory-alist 95 - `((".*" . ,temporary-file-directory))) 96 - (setq auto-save-file-name-transforms 97 - `((".*" ,temporary-file-directory))) 98 - 99 - ;; use a dark theme 100 - (load-theme 'dracula t) 101 - 102 - ;; Set a font 103 - (add-to-list 'default-frame-alist 104 - '(font . "Cascadia Code PL-10")) 105 - 106 - ;; require all those local packages 107 - ${lispRequires} 108 - (require 'pest-mode) 109 - (add-to-list #'auto-mode-alist '("\\.pest\\'" . pest-mode)) 110 - 111 - (global-auto-revert-mode) 112 - (global-whitespace-mode) 113 - (global-linum-mode) 114 - 115 - (setq-default indent-tabs-mode nil) 116 - (setq-default tab-width 2) 117 - (setq-default whitespace-style 118 - '(face 119 - tabs 120 - spaces 121 - trailing 122 - lines-tail 123 - newline 124 - missing-newline-at-eof 125 - space-before-tab 126 - indentation 127 - empty 128 - space-after-tab 129 - space-mark 130 - tab-mark 131 - newline-mark)) 132 - 133 - ;; set splash screen 134 - (setq inhibit-startup-screen ${bool2Lisp (!cfg.splashScreen)}) 135 - ''; 136 - 137 - programs.emacs.extraPackages = ep: 138 - [ 139 - ep.company-go 140 - ep.dracula-theme 141 - ep.docker-compose-mode 142 - ep.dockerfile-mode 143 - ep.go-mode 144 - ep.markdown-mode 145 - ep.yaml-mode 146 - ep.adoc-mode 147 - ep.k8s-mode 148 - ep.buttercup 149 - ep.adoc-mode 150 - ep.hledger-mode 151 - ep.typescript-mode 152 - ep.earthfile-mode 153 - ep.ledger-mode 154 - ep.pest-mode 155 - 156 - # ep.bazel-mode 157 - 158 - # (ep.trivialBuild { pname = "configuration"; src = confPackages; }) 159 - ] 160 - ++ lib.attrsets.mapAttrsToList 161 - (pname: v: 162 - ep.trivialBuild { 163 - inherit pname; 164 - inherit (v) src; 165 - # src = v.src; 166 - packageRequires = v.ep ep; 167 - }) 168 - confPackages; 169 - 170 - home.file = { 171 - ".emacs.d/init.el" = { 172 - text = 173 - config.lib.emacs.generatePackage "init" 174 - "Initialises emacs configuration" [] [] 175 - cfg.extraInit; 176 - }; 177 - }; 178 - }; 179 - }
-33
home/modules/programs/emacs/helm.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - emacsCfg = config.programs.emacs; 7 - in { 8 - config = lib.mkIf emacsCfg.enable { 9 - programs.emacs = { 10 - localPackages."init-helm" = { 11 - tag = "Setup helm"; 12 - comments = []; 13 - requires = ["helm"]; 14 - packageRequires = ep: [ep.helm ep.helm-rg]; 15 - code = '' 16 - ;; enable and configure auto resize 17 - (helm-autoresize-mode t) 18 - (setq-default 19 - helm-autoresize-max-height 20 ; take at most 20% of the screen 20 - helm-autoresize-min-height 1) ; get as small as necessary 21 - 22 - ;; set up key bindings 23 - (global-set-key (kbd "M-x") 'helm-M-x) 24 - (global-set-key (kbd "C-x C-f") 'helm-find-files) 25 - (global-set-key (kbd "C-x C-b") 'helm-buffers-list) 26 - 27 - ;; enable helm 28 - (helm-mode t) 29 - ''; 30 - }; 31 - }; 32 - }; 33 - }
-60
home/modules/programs/emacs/lib.nix
··· 1 - _: let 2 - generatePackage = { 3 - name, 4 - tagLine, 5 - commentLines, 6 - requireList, 7 - code, 8 - }: let 9 - prelude = generatePrelude {inherit name tagLine commentLines;}; 10 - requires = generateRequires requireList; 11 - postlude = generatePostlude name; 12 - in '' 13 - ${prelude} 14 - 15 - ${requires} 16 - 17 - ${code} 18 - 19 - ${postlude} 20 - ''; 21 - 22 - generatePrelude = { 23 - name, 24 - tagLine, 25 - commentLines, 26 - }: let 27 - generated = "This file is generated! DO NOT CHANGE!"; 28 - comments = 29 - builtins.concatStringsSep "\n" 30 - (builtins.map (l: 31 - if l == "" 32 - then "" 33 - else ";; ${l}") 34 - ([generated] ++ commentLines)); 35 - in '' 36 - ;;; ${name} --- ${tagLine} 37 - 38 - ;;; Commentary: 39 - 40 - ${comments} 41 - 42 - ;;; Code: 43 - ''; 44 - 45 - generatePostlude = name: '' 46 - (provide '${name}) 47 - ;;; ${name}.el ends here 48 - ''; 49 - 50 - generateRequires = list: let 51 - sorted = builtins.sort (l: r: l < r) list; 52 - required = builtins.map (r: "(require '${r})") sorted; 53 - in 54 - builtins.concatStringsSep "\n" required; 55 - in { 56 - config.lib.emacs.generatePackage = name: tagLine: commentLines: requireList: code: 57 - generatePackage { 58 - inherit name code tagLine commentLines requireList; 59 - }; 60 - }
-65
home/modules/programs/emacs/lsp.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.programs.emacs.lsp-mode; 7 - 8 - mode-hooks = with lib; let 9 - sorted = builtins.sort (l: r: l < r) cfg.languages; 10 - uni = unique sorted; 11 - hooks = builtins.map (l: "'${l}-mode-hook") uni; 12 - add-hooks = builtins.map (h: "(add-hook ${h} #'lsp)") hooks; 13 - in 14 - builtins.concatStringsSep "\n" add-hooks; 15 - in { 16 - options.programs.emacs.lsp-mode = { 17 - enable = lib.mkEnableOption "Enables and installs lsp-mode"; 18 - 19 - languages = lib.mkOption { 20 - type = lib.types.listOf lib.types.str; 21 - default = []; 22 - description = '' 23 - The prefixes of the prog-mode that shall be handled through lsp-mode. 24 - ''; 25 - example = ["erlang"]; 26 - }; 27 - }; 28 - 29 - config = lib.mkIf cfg.enable { 30 - programs.emacs = { 31 - localPackages."init-lsp" = { 32 - tag = "Setup and prepare the LSP mode"; 33 - comments = []; 34 - requires = ["lsp-mode"]; 35 - packageRequires = ep: [ 36 - # ep.company-lsp 37 - ep.helm-lsp 38 - ep.lsp-mode 39 - ep.lsp-origami 40 - ep.lsp-ui 41 - ep.yasnippet 42 - ]; 43 - code = '' 44 - (yas-global-mode t) 45 - 46 - (setq lsp-log-io t) 47 - (setq lsp-ui-sideline-enable t) 48 - (setq lsp-ui-doc-enable t) 49 - (setq lsp-ui-doc-position 'bottom) 50 - 51 - (eval-after-load 'company 52 - '(push 'company-lsp company-backend)) 53 - 54 - (dolist (match 55 - '("[/\\\\].direnv$" 56 - "[/\\\\]node_modules$" 57 - "/nix/store")) 58 - (add-to-list 'lsp-file-watch-ignored match)) 59 - 60 - ${mode-hooks} 61 - ''; 62 - }; 63 - }; 64 - }; 65 - }
-37
home/modules/programs/emacs/polymode/default.nix
··· 1 - { 2 - config, 3 - lib, 4 - ... 5 - }: 6 - with lib; # TODO: long term remove this `with` 7 - 8 - let 9 - inherit (config.programs) emacs; 10 - in { 11 - config = lib.mkIf emacs.enable { 12 - programs.emacs.extraPackages = ep: [ep.polymode]; 13 - 14 - programs.emacs.localPackages."init-polymode" = { 15 - tag = "Setup and initialise polymode"; 16 - comments = []; 17 - requires = []; 18 - code = '' 19 - ;; polymode 20 - (add-to-list 'auto-mode-alist '("\\.nix$" . poly-nix-mode)) 21 - 22 - (define-hostmode poly-nix-hostmode :mode 'nix-mode) 23 - 24 - (define-innermode poly-elisp-expr-nix-innermode 25 - :mode 'emacs-lisp-mode 26 - :head-matcher (cons "'''\n\\( *;;.*\n\\)" 1) 27 - :tail-matcher " *''';$" 28 - :head-mode 'body 29 - :tail-mode 'host) 30 - 31 - (define-polymode poly-nix-mode 32 - :hostmode 'poly-nix-hostmode 33 - :innermodes '(poly-elisp-expr-nix-innermode)) 34 - ''; 35 - }; 36 - }; 37 - }
-25
home/modules/programs/emacs/projectile.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - emacsCfg = config.programs.emacs; 7 - in { 8 - config = lib.mkIf emacsCfg.enable { 9 - programs.emacs = { 10 - localPackages."init-projectile" = { 11 - tag = "Setup projectile"; 12 - comments = []; 13 - requires = ["projectile" "helm-projectile" "tramp"]; 14 - packageRequires = ep: [ep.projectile ep.helm-projectile]; 15 - code = '' 16 - ;; enable projectile 17 - (projectile-mode t) 18 - (helm-projectile-on) 19 - 20 - (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map) 21 - ''; 22 - }; 23 - }; 24 - }; 25 - }
-31
home/modules/programs/emacs/telephoneline.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - ecfg = config.programs.emacs; 7 - in { 8 - config = lib.mkIf ecfg.enable { 9 - programs.emacs.localPackages."init-telephoneline" = { 10 - tag = "Setup telephone line"; 11 - comments = []; 12 - requires = []; 13 - code = '' 14 - ;; set up telephone line 15 - (setq-default 16 - telephone-line-lhs '((accent . (telephone-line-vc-segment 17 - telephone-line-erc-modified-channels-segment 18 - telephone-line-process-segment)) 19 - (nil . (telephone-line-minor-mode-segment 20 - telephone-line-buffer-segment))) 21 - telephone-line-rhs '((nil . (telephone-line-misc-info-segment)) 22 - (accent . (telephone-line-major-mode-segment)) 23 - (accent . (telephone-line-airline-position-segment)))) 24 - 25 - (telephone-line-mode t) 26 - ''; 27 - }; 28 - 29 - programs.emacs.extraPackages = ep: [ep.telephone-line]; 30 - }; 31 - }
-72
home/modules/programs/emacs/whichkey/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: 6 - with lib; let 7 - cfg = config.programs.emacs.whichkey; 8 - enabled = config.programs.emacs.enable; 9 - 10 - keyReplacementType = types.listOf (types.submodule (_: { 11 - options = { 12 - keys = lib.mkOption { 13 - type = types.str; 14 - description = '' 15 - Keys that shall get a description. 16 - ''; 17 - }; 18 - replace = lib.mkOption { 19 - type = types.str; 20 - description = '' 21 - Human readable description for the keycombination 22 - ''; 23 - }; 24 - }; 25 - })); 26 - 27 - replacements = 28 - lib.concatStringsSep "\n " 29 - (builtins.map ({ 30 - keys, 31 - replace, 32 - ... 33 - }: ''"${keys}" "${replace}"'') 34 - cfg.replacement); 35 - in { 36 - options.programs.emacs.whichkey = { 37 - replacement = lib.mkOption {type = keyReplacementType;}; 38 - }; 39 - 40 - config = lib.mkIf enabled { 41 - programs.emacs = { 42 - whichkey.replacement = [ 43 - { 44 - keys = "C-x C-f"; 45 - replace = "find file"; 46 - } 47 - { 48 - keys = "C-x C-s"; 49 - replace = "write file"; 50 - } 51 - { 52 - keys = "C-x C-c"; 53 - replace = "leave emacs"; 54 - } 55 - ]; 56 - extraPackages = ep: [ep.which-key]; 57 - localPackages."init-whichkey" = { 58 - tag = "Setup and initialise whichkey"; 59 - comments = []; 60 - requires = []; 61 - code = '' 62 - ;; which-key 63 - (which-key-mode t) 64 - (setq-default which-key-idle-delay 0.1) 65 - 66 - (which-key-add-key-based-replacements 67 - ${replacements}) 68 - ''; 69 - }; 70 - }; 71 - }; 72 - }
-16
home/modules/programs/exa/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.programs.exa; 8 - in { 9 - config = lib.mkIf cfg.enable { 10 - home.packages = [pkgs.exa]; 11 - 12 - programs.zshell.aliases = { 13 - ll = "exa --header --git --classify --long --binary --group --time-style=long-iso --links --all --all --group-directories-first --sort=name"; 14 - }; 15 - }; 16 - }
+16
home/modules/programs/eza/default.nix
··· 1 + _: { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: let 7 + cfg = config.programs.eza; 8 + in { 9 + config = lib.mkIf cfg.enable { 10 + programs.eza.package = pkgs.eza; 11 + programs.zsh.shellAliases = { 12 + ll = "eza --header --git --classify --long --binary --group --time-style=long-iso --links --all --all --group-directories-first --sort=name"; 13 + tree = "eza --tree"; 14 + }; 15 + }; 16 + }
+15
home/modules/programs/ghostty/default.nix
··· 1 + _: {pkgs, ...}: { 2 + xdg.configFile."ghostty/config".text = 3 + # toml 4 + '' 5 + font-family = "Departure Mono" 6 + 7 + ## uncomment once keybindings have been set to something I am familiar 8 + ## with. The bar contains the menu, which I need for splits for nowโ€ฆ 9 + # gtk-titlebar = false 10 + 11 + theme = "catppuccin-mocha" 12 + ''; 13 + 14 + home.packages = [pkgs.ghostty]; 15 + }
+2 -2
home/modules/programs/nixpkgs/default.nix
··· 6 6 allowed = config.nixpkgs.allowedUnfree; 7 7 in { 8 8 options.nixpkgs.allowedUnfree = lib.mkOption { 9 - type = lib.types.listOf lib.types.string; 9 + type = lib.types.listOf lib.types.str; 10 10 default = []; 11 11 description = '' 12 12 Allows for unfree packages by their name. ··· 16 16 config.nixpkgs.config.allowUnfreePredicate = 17 17 if (allowed == []) 18 18 then (_: false) 19 - else (pkg: __elem (lib.getName pkg) allowed); 19 + else (pkg: builtins.elem (lib.getName pkg) allowed); 20 20 }
-23
home/modules/programs/openshift/default.nix
··· 1 - _: { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: let 7 - cfg = config.programs.openshift; 8 - in { 9 - options.programs.openshift = { 10 - enable = lib.mkEnableOption "Tools to manage openshift instances"; 11 - }; 12 - 13 - config = lib.mkIf cfg.enable { 14 - home.packages = [pkgs.sops pkgs.openshift (lib.setPrio 0 pkgs.kubectl) pkgs.kubernetes-helm]; 15 - 16 - programs.zsh.initExtra = '' 17 - # Enable autocomplete for oc, kubectl and helm 18 - eval "$(${pkgs.openshift}/bin/oc completion zsh)" 19 - eval "$(${pkgs.kubectl}/bin/kubectl completion zsh)" 20 - eval "$(${pkgs.kubernetes-helm}/bin/helm completion zsh)" 21 - ''; 22 - }; 23 - }
+28
home/modules/programs/p10k/default.nix
··· 1 + _: { 2 + pkgs, 3 + lib, 4 + config, 5 + ... 6 + }: let 7 + cfg = config.programs.p10k; 8 + zsh = config.programs.zsh.enable; 9 + in { 10 + options = { 11 + programs.p10k.enable = lib.mkEnableOption "p10k"; 12 + }; 13 + 14 + config = lib.mkIf (cfg.enable && zsh) { 15 + programs.zsh.plugins = [ 16 + { 17 + name = "powerlevel10k"; 18 + src = pkgs.zsh-powerlevel10k; 19 + file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; 20 + } 21 + { 22 + name = "powerlevel10k-config"; 23 + src = ./p10k-config; 24 + file = "p10k.zsh"; 25 + } 26 + ]; 27 + }; 28 + }
+1671
home/modules/programs/p10k/p10k-config/p10k.zsh
··· 1 + # Generated by Powerlevel10k configuration wizard on 2023-03-14 at 22:38 CET. 2 + # Based on romkatv/powerlevel10k/config/p10k-classic.zsh. 3 + # Wizard options: powerline, classic, unicode, darkest, 24h time, angled separators, 4 + # blurred heads, flat tails, 2 lines, solid, full frame, compact, concise, 5 + # transient_prompt, instant_prompt=verbose. 6 + # Type `p10k configure` to generate another config. 7 + # 8 + # Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate 9 + # your own config based on it. 10 + # 11 + # Tip: Looking for a nice color? Here's a one-liner to print colormap. 12 + # 13 + # for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done 14 + 15 + # Temporarily change options. 16 + 'builtin' 'local' '-a' 'p10k_config_opts' 17 + [[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') 18 + [[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') 19 + [[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') 20 + 'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' 21 + 22 + () { 23 + emulate -L zsh -o extended_glob 24 + 25 + # Unset all configuration options. This allows you to apply configuration changes without 26 + # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. 27 + unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' 28 + 29 + # Zsh >= 5.1 is required. 30 + [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return 31 + 32 + # The list of segments shown on the left. Fill it with the most important segments. 33 + typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( 34 + # =========================[ Line #1 ]========================= 35 + # os_icon # os identifier 36 + dir # current directory 37 + vcs # git status 38 + # =========================[ Line #2 ]========================= 39 + newline # \n 40 + # prompt_char # prompt symbol 41 + ) 42 + 43 + # The list of segments shown on the right. Fill it with less important segments. 44 + # Right prompt on the last prompt line (where you are typing your commands) gets 45 + # automatically hidden when the input line reaches it. Right prompt above the 46 + # last prompt line gets hidden if it would overlap with left prompt. 47 + typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( 48 + # =========================[ Line #1 ]========================= 49 + status # exit code of the last command 50 + command_execution_time # duration of the last command 51 + background_jobs # presence of background jobs 52 + direnv # direnv status (https://direnv.net/) 53 + asdf # asdf version manager (https://github.com/asdf-vm/asdf) 54 + virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) 55 + anaconda # conda environment (https://conda.io/) 56 + pyenv # python environment (https://github.com/pyenv/pyenv) 57 + goenv # go environment (https://github.com/syndbg/goenv) 58 + nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) 59 + nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) 60 + nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) 61 + # node_version # node.js version 62 + # go_version # go version (https://golang.org) 63 + # rust_version # rustc version (https://www.rust-lang.org) 64 + # dotnet_version # .NET version (https://dotnet.microsoft.com) 65 + # php_version # php version (https://www.php.net/) 66 + # laravel_version # laravel php framework version (https://laravel.com/) 67 + # java_version # java version (https://www.java.com/) 68 + # package # name@version from package.json (https://docs.npmjs.com/files/package.json) 69 + rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) 70 + rvm # ruby version from rvm (https://rvm.io) 71 + fvm # flutter version management (https://github.com/leoafarias/fvm) 72 + luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) 73 + jenv # java version from jenv (https://github.com/jenv/jenv) 74 + plenv # perl version from plenv (https://github.com/tokuhirom/plenv) 75 + perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew) 76 + phpenv # php version from phpenv (https://github.com/phpenv/phpenv) 77 + scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) 78 + haskell_stack # haskell version from stack (https://haskellstack.org/) 79 + kubecontext # current kubernetes context (https://kubernetes.io/) 80 + terraform # terraform workspace (https://www.terraform.io) 81 + # terraform_version # terraform version (https://www.terraform.io) 82 + aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) 83 + aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) 84 + azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) 85 + gcloud # google cloud cli account and project (https://cloud.google.com/) 86 + google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) 87 + toolbox # toolbox name (https://github.com/containers/toolbox) 88 + context # user@hostname 89 + nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) 90 + ranger # ranger shell (https://github.com/ranger/ranger) 91 + nnn # nnn shell (https://github.com/jarun/nnn) 92 + lf # lf shell (https://github.com/gokcehan/lf) 93 + xplr # xplr shell (https://github.com/sayanarijit/xplr) 94 + vim_shell # vim shell indicator (:sh) 95 + midnight_commander # midnight commander shell (https://midnight-commander.org/) 96 + nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) 97 + vi_mode # vi mode (you don't need this if you've enabled prompt_char) 98 + # vpn_ip # virtual private network indicator 99 + # load # CPU load 100 + # disk_usage # disk usage 101 + # ram # free RAM 102 + # swap # used swap 103 + todo # todo items (https://github.com/todotxt/todo.txt-cli) 104 + timewarrior # timewarrior tracking status (https://timewarrior.net/) 105 + taskwarrior # taskwarrior task count (https://taskwarrior.org/) 106 + # cpu_arch # CPU architecture 107 + time # current time 108 + # =========================[ Line #2 ]========================= 109 + newline # \n 110 + # ip # ip address and bandwidth usage for a specified network interface 111 + # public_ip # public IP address 112 + # proxy # system-wide http/https/ftp proxy 113 + # battery # internal battery 114 + # wifi # wifi speed 115 + # example # example user-defined segment (see prompt_example function below) 116 + ) 117 + 118 + # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. 119 + typeset -g POWERLEVEL9K_MODE=powerline 120 + # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid 121 + # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. 122 + typeset -g POWERLEVEL9K_ICON_PADDING=none 123 + 124 + # When set to true, icons appear before content on both sides of the prompt. When set 125 + # to false, icons go after content. If empty or not set, icons go before content in the left 126 + # prompt and after content in the right prompt. 127 + # 128 + # You can also override it for a specific segment: 129 + # 130 + # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false 131 + # 132 + # Or for a specific segment in specific state: 133 + # 134 + # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false 135 + typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= 136 + 137 + # Add an empty line before each prompt. 138 + typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false 139 + 140 + # Connect left prompt lines with these symbols. You'll probably want to use the same color 141 + # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. 142 + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%238Fโ•ญโ”€' 143 + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%238Fโ”œโ”€' 144 + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%238Fโ•ฐโ”€' 145 + # Connect right prompt lines with these symbols. 146 + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238Fโ”€โ•ฎ' 147 + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238Fโ”€โ”ค' 148 + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238Fโ”€โ•ฏ' 149 + 150 + # Filler between left and right prompt on the first prompt line. You can set it to ' ', 'ยท' or 151 + # 'โ”€'. The last two make it easier to see the alignment between left and right prompt and to 152 + # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false 153 + # for more compact prompt if using this option. 154 + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='โ”€' 155 + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= 156 + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= 157 + if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then 158 + # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE 159 + # ornaments defined above. 160 + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238 161 + # Start filler from the edge of the screen if there are no left segments on the first line. 162 + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' 163 + # End filler on the edge of the screen if there are no right segments on the first line. 164 + typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' 165 + fi 166 + 167 + # Default background color. 168 + typeset -g POWERLEVEL9K_BACKGROUND=234 169 + 170 + # Separator between same-color segments on the left. 171 + typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%242F\uE0B1' 172 + # Separator between same-color segments on the right. 173 + typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%242F\uE0B3' 174 + # Separator between different-color segments on the left. 175 + typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' 176 + # Separator between different-color segments on the right. 177 + typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' 178 + # The right end of left prompt. 179 + typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='โ–“โ–’โ–‘' 180 + # The left end of right prompt. 181 + typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='โ–‘โ–’โ–“' 182 + # The left end of left prompt. 183 + typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='' 184 + # The right end of right prompt. 185 + typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='' 186 + # Left prompt terminator for lines without any segments. 187 + typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= 188 + 189 + #################################[ os_icon: os identifier ]################################## 190 + # OS identifier color. 191 + typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 192 + # Custom icon. 193 + # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='โญ' 194 + 195 + ################################[ prompt_char: prompt symbol ]################################ 196 + # Transparent background. 197 + typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= 198 + # Green prompt symbol if the last command succeeded. 199 + typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 200 + # Red prompt symbol if the last command failed. 201 + typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 202 + # Default prompt symbol. 203 + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='โฏ' 204 + # Prompt symbol in command vi mode. 205 + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='โฎ' 206 + # Prompt symbol in visual vi mode. 207 + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' 208 + # Prompt symbol in overwrite vi mode. 209 + typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='โ–ถ' 210 + typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true 211 + # No line terminator if prompt_char is the last segment. 212 + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= 213 + # No line introducer if prompt_char is the first segment. 214 + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= 215 + # No surrounding whitespace. 216 + typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= 217 + 218 + ##################################[ dir: current directory ]################################## 219 + # Default current directory color. 220 + typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 221 + # If directory is too long, shorten some of its segments to the shortest possible unique 222 + # prefix. The shortened directory can be tab-completed to the original. 223 + typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique 224 + # Replace removed segment suffixes with this symbol. 225 + typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= 226 + # Color of the shortened directory segments. 227 + typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 228 + # Color of the anchor directory segments. Anchor segments are never shortened. The first 229 + # segment is always an anchor. 230 + typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 231 + # Display anchor directory segments in bold. 232 + typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true 233 + # Don't shorten directories that contain any of these files. They are anchors. 234 + local anchor_files=( 235 + .bzr 236 + .citc 237 + .git 238 + .hg 239 + .node-version 240 + .python-version 241 + .go-version 242 + .ruby-version 243 + .lua-version 244 + .java-version 245 + .perl-version 246 + .php-version 247 + .tool-version 248 + .shorten_folder_marker 249 + .svn 250 + .terraform 251 + CVS 252 + Cargo.toml 253 + composer.json 254 + go.mod 255 + package.json 256 + stack.yaml 257 + ) 258 + typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" 259 + # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains 260 + # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is 261 + # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) 262 + # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers 263 + # and other directories don't. 264 + # 265 + # Optionally, "first" and "last" can be followed by ":<offset>" where <offset> is an integer. 266 + # This moves the truncation point to the right (positive offset) or to the left (negative offset) 267 + # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" 268 + # respectively. 269 + typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false 270 + # Don't shorten this many last directory segments. They are anchors. 271 + typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 272 + # Shorten directory if it's longer than this even if there is space for it. The value can 273 + # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, 274 + # directory will be shortened only when prompt doesn't fit or when other parameters demand it 275 + # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). 276 + # If set to `0`, directory will always be shortened to its minimum length. 277 + typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 278 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this 279 + # many columns for typing commands. 280 + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 281 + # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least 282 + # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. 283 + typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 284 + # If set to true, embed a hyperlink into the directory. Useful for quickly 285 + # opening a directory in the file manager simply by clicking the link. 286 + # Can also be handy when the directory is shortened, as it allows you to see 287 + # the full directory that was used in previous commands. 288 + typeset -g POWERLEVEL9K_DIR_HYPERLINK=false 289 + 290 + # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON 291 + # and POWERLEVEL9K_DIR_CLASSES below. 292 + typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 293 + 294 + # The default icon shown next to non-writable and non-existent directories when 295 + # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. 296 + typeset -g POWERLEVEL9K_LOCK_ICON='๐Ÿ”’' 297 + 298 + # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different 299 + # directories. It must be an array with 3 * N elements. Each triplet consists of: 300 + # 301 + # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with 302 + # extended_glob option enabled. 303 + # 2. Directory class for the purpose of styling. 304 + # 3. An empty string. 305 + # 306 + # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. 307 + # 308 + # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories 309 + # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. 310 + # 311 + # For example, given these settings: 312 + # 313 + # typeset -g POWERLEVEL9K_DIR_CLASSES=( 314 + # '~/work(|/*)' WORK '' 315 + # '~(|/*)' HOME '' 316 + # '*' DEFAULT '') 317 + # 318 + # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one 319 + # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or 320 + # WORK_NON_EXISTENT. 321 + # 322 + # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an 323 + # option to define custom colors and icons for different directory classes. 324 + # 325 + # # Styling for WORK. 326 + # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='โญ' 327 + # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 328 + # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 329 + # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 330 + # 331 + # # Styling for WORK_NOT_WRITABLE. 332 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='โญ' 333 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 334 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 335 + # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 336 + # 337 + # # Styling for WORK_NON_EXISTENT. 338 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='โญ' 339 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 340 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 341 + # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 342 + # 343 + # If a styling parameter isn't explicitly defined for some class, it falls back to the classless 344 + # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls 345 + # back to POWERLEVEL9K_DIR_FOREGROUND. 346 + # 347 + typeset -g POWERLEVEL9K_DIR_CLASSES=() 348 + 349 + # Custom prefix. 350 + # typeset -g POWERLEVEL9K_DIR_PREFIX='%244Fin ' 351 + 352 + #####################################[ vcs: git status ]###################################### 353 + # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon. 354 + typeset -g POWERLEVEL9K_VCS_BRANCH_ICON= 355 + 356 + # Untracked files icon. It's really a question mark, your font isn't broken. 357 + # Change the value of this parameter to show a different icon. 358 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' 359 + 360 + # Formatter for Git status. 361 + # 362 + # Example output: master wip โ‡ฃ42โ‡ก42 *42 merge ~42 +42 !42 ?42. 363 + # 364 + # You can edit the function to customize how Git status looks. 365 + # 366 + # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: 367 + # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. 368 + function my_git_formatter() { 369 + emulate -L zsh 370 + 371 + if [[ -n $P9K_CONTENT ]]; then 372 + # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from 373 + # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. 374 + typeset -g my_git_format=$P9K_CONTENT 375 + return 376 + fi 377 + 378 + if (( $1 )); then 379 + # Styling for up-to-date Git status. 380 + local meta='%244F' # grey foreground 381 + local clean='%76F' # green foreground 382 + local modified='%178F' # yellow foreground 383 + local untracked='%39F' # blue foreground 384 + local conflicted='%196F' # red foreground 385 + else 386 + # Styling for incomplete and stale Git status. 387 + local meta='%244F' # grey foreground 388 + local clean='%244F' # grey foreground 389 + local modified='%244F' # grey foreground 390 + local untracked='%244F' # grey foreground 391 + local conflicted='%244F' # grey foreground 392 + fi 393 + 394 + local res 395 + 396 + if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then 397 + local branch=${(V)VCS_STATUS_LOCAL_BRANCH} 398 + # If local branch name is at most 32 characters long, show it in full. 399 + # Otherwise show the first 12 โ€ฆ the last 12. 400 + # Tip: To always show local branch name in full without truncation, delete the next line. 401 + (( $#branch > 32 )) && branch[13,-13]="โ€ฆ" # <-- this line 402 + res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" 403 + fi 404 + 405 + if [[ -n $VCS_STATUS_TAG 406 + # Show tag only if not on a branch. 407 + # Tip: To always show tag, delete the next line. 408 + && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line 409 + ]]; then 410 + local tag=${(V)VCS_STATUS_TAG} 411 + # If tag name is at most 32 characters long, show it in full. 412 + # Otherwise show the first 12 โ€ฆ the last 12. 413 + # Tip: To always show tag name in full without truncation, delete the next line. 414 + (( $#tag > 32 )) && tag[13,-13]="โ€ฆ" # <-- this line 415 + res+="${meta}#${clean}${tag//\%/%%}" 416 + fi 417 + 418 + # Display the current Git commit if there is no branch and no tag. 419 + # Tip: To always display the current Git commit, delete the next line. 420 + [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line 421 + res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" 422 + 423 + # Show tracking branch name if it differs from local branch. 424 + if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then 425 + res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" 426 + fi 427 + 428 + # Display "wip" if the latest commit's summary contains "wip" or "WIP". 429 + if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then 430 + res+=" ${modified}wip" 431 + fi 432 + 433 + # โ‡ฃ42 if behind the remote. 434 + (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}โ‡ฃ${VCS_STATUS_COMMITS_BEHIND}" 435 + # โ‡ก42 if ahead of the remote; no leading space if also behind the remote: โ‡ฃ42โ‡ก42. 436 + (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " 437 + (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}โ‡ก${VCS_STATUS_COMMITS_AHEAD}" 438 + # โ‡ 42 if behind the push remote. 439 + (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}โ‡ ${VCS_STATUS_PUSH_COMMITS_BEHIND}" 440 + (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " 441 + # โ‡ข42 if ahead of the push remote; no leading space if also behind: โ‡ 42โ‡ข42. 442 + (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}โ‡ข${VCS_STATUS_PUSH_COMMITS_AHEAD}" 443 + # *42 if have stashes. 444 + (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" 445 + # 'merge' if the repo is in an unusual state. 446 + [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" 447 + # ~42 if have merge conflicts. 448 + (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" 449 + # +42 if have staged changes. 450 + (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" 451 + # !42 if have unstaged changes. 452 + (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" 453 + # ?42 if have untracked files. It's really a question mark, your font isn't broken. 454 + # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. 455 + # Remove the next line if you don't want to see untracked files at all. 456 + (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" 457 + # "โ”€" if the number of unstaged files is unknown. This can happen due to 458 + # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower 459 + # than the number of files in the Git index, or due to bash.showDirtyState being set to false 460 + # in the repository config. The number of staged and untracked files may also be unknown 461 + # in this case. 462 + (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}โ”€" 463 + 464 + typeset -g my_git_format=$res 465 + } 466 + functions -M my_git_formatter 2>/dev/null 467 + 468 + # Don't count the number of unstaged, untracked and conflicted files in Git repositories with 469 + # more than this many files in the index. Negative value means infinity. 470 + # 471 + # If you are working in Git repositories with tens of millions of files and seeing performance 472 + # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output 473 + # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's 474 + # config: `git config bash.showDirtyState false`. 475 + typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 476 + 477 + # Don't show Git status in prompt for repositories whose workdir matches this pattern. 478 + # For example, if set to '~', the Git repository at $HOME/.git will be ignored. 479 + # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. 480 + typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' 481 + 482 + # Disable the default Git status formatting. 483 + typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true 484 + # Install our own Git status formatter. 485 + typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' 486 + typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' 487 + # Enable counters for staged, unstaged, etc. 488 + typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 489 + 490 + # Icon color. 491 + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 492 + typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 493 + # Custom icon. 494 + typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION= 495 + # Custom prefix. 496 + # typeset -g POWERLEVEL9K_VCS_PREFIX='%244Fon ' 497 + 498 + # Show status of repositories of these types. You can add svn and/or hg if you are 499 + # using them. If you do, your prompt may become slow even when your current directory 500 + # isn't in an svn or hg reposotiry. 501 + typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) 502 + 503 + # These settings are used for repositories other than Git or when gitstatusd fails and 504 + # Powerlevel10k has to fall back to using vcs_info. 505 + typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 506 + typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 507 + typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 508 + 509 + ##########################[ status: exit code of the last command ]########################### 510 + # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and 511 + # style them independently from the regular OK and ERROR state. 512 + typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true 513 + 514 + # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as 515 + # it will signify success by turning green. 516 + typeset -g POWERLEVEL9K_STATUS_OK=true 517 + typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 518 + typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='โœ”' 519 + 520 + # Status when some part of a pipe command fails but the overall exit status is zero. It may look 521 + # like this: 1|0. 522 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true 523 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 524 + typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='โœ”' 525 + 526 + # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as 527 + # it will signify error by turning red. 528 + typeset -g POWERLEVEL9K_STATUS_ERROR=true 529 + typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 530 + typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 531 + 532 + # Status when the last command was terminated by a signal. 533 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true 534 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 535 + # Use terse signal names: "INT" instead of "SIGINT(2)". 536 + typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false 537 + typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 538 + 539 + # Status when some part of a pipe command fails and the overall exit status is also non-zero. 540 + # It may look like this: 1|0. 541 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true 542 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 543 + typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='โœ˜' 544 + 545 + ###################[ command_execution_time: duration of the last command ]################### 546 + # Show duration of the last command if takes at least this many seconds. 547 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 548 + # Show this many fractional digits. Zero means round to seconds. 549 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 550 + # Execution time color. 551 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 552 + # Duration format: 1d 2h 3m 4s. 553 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' 554 + # Custom icon. 555 + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION= 556 + # Custom prefix. 557 + # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%244Ftook ' 558 + 559 + #######################[ background_jobs: presence of background jobs ]####################### 560 + # Don't show the number of background jobs. 561 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false 562 + # Background jobs color. 563 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 564 + # Custom icon. 565 + typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='โ‰ก' 566 + 567 + #######################[ direnv: direnv status (https://direnv.net/) ]######################## 568 + # Direnv color. 569 + typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 570 + # Custom icon. 571 + # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 572 + 573 + ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### 574 + # Default asdf color. Only used to display tools for which there is no color override (see below). 575 + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. 576 + typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 577 + 578 + # There are four parameters that can be used to hide asdf tools. Each parameter describes 579 + # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at 580 + # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to 581 + # hide a tool, it gets shown. 582 + # 583 + # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and 584 + # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: 585 + # 586 + # asdf local python 3.8.1 587 + # asdf global python 3.8.1 588 + # 589 + # After running both commands the current python version is 3.8.1 and its source is "local" as 590 + # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, 591 + # it'll hide python version in this case because 3.8.1 is the same as the global version. 592 + # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't 593 + # contain "local". 594 + 595 + # Hide tool versions that don't come from one of these sources. 596 + # 597 + # Available sources: 598 + # 599 + # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" 600 + # - local `asdf current` says "set by /some/not/home/directory/file" 601 + # - global `asdf current` says "set by /home/username/file" 602 + # 603 + # Note: If this parameter is set to (shell local global), it won't hide tools. 604 + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. 605 + typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) 606 + 607 + # If set to false, hide tool versions that are the same as global. 608 + # 609 + # Note: The name of this parameter doesn't reflect its meaning at all. 610 + # Note: If this parameter is set to true, it won't hide tools. 611 + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. 612 + typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false 613 + 614 + # If set to false, hide tool versions that are equal to "system". 615 + # 616 + # Note: If this parameter is set to true, it won't hide tools. 617 + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. 618 + typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true 619 + 620 + # If set to non-empty value, hide tools unless there is a file matching the specified file pattern 621 + # in the current directory, or its parent directory, or its grandparent directory, and so on. 622 + # 623 + # Note: If this parameter is set to empty value, it won't hide tools. 624 + # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. 625 + # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. 626 + # 627 + # Example: Hide nodejs version when there is no package.json and no *.js files in the current 628 + # directory, in `..`, in `../..` and so on. 629 + # 630 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' 631 + typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= 632 + 633 + # Ruby version from asdf. 634 + typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 635 + # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='โญ' 636 + # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' 637 + 638 + # Python version from asdf. 639 + typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 640 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='โญ' 641 + # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' 642 + 643 + # Go version from asdf. 644 + typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 645 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='โญ' 646 + # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' 647 + 648 + # Node.js version from asdf. 649 + typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 650 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='โญ' 651 + # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' 652 + 653 + # Rust version from asdf. 654 + typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 655 + # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='โญ' 656 + # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' 657 + 658 + # .NET Core version from asdf. 659 + typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 660 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='โญ' 661 + # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' 662 + 663 + # Flutter version from asdf. 664 + typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 665 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='โญ' 666 + # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' 667 + 668 + # Lua version from asdf. 669 + typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 670 + # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='โญ' 671 + # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' 672 + 673 + # Java version from asdf. 674 + typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 675 + # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='โญ' 676 + # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' 677 + 678 + # Perl version from asdf. 679 + typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 680 + # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='โญ' 681 + # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' 682 + 683 + # Erlang version from asdf. 684 + typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 685 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='โญ' 686 + # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' 687 + 688 + # Elixir version from asdf. 689 + typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 690 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='โญ' 691 + # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' 692 + 693 + # Postgres version from asdf. 694 + typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 695 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='โญ' 696 + # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' 697 + 698 + # PHP version from asdf. 699 + typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 700 + # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='โญ' 701 + # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' 702 + 703 + # Haskell version from asdf. 704 + typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 705 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='โญ' 706 + # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' 707 + 708 + # Julia version from asdf. 709 + typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 710 + # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='โญ' 711 + # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' 712 + 713 + ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### 714 + # NordVPN connection indicator color. 715 + typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 716 + # Hide NordVPN connection indicator when not connected. 717 + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= 718 + typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= 719 + # Custom icon. 720 + typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='nord' 721 + 722 + #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## 723 + # Ranger shell color. 724 + typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 725 + # Custom icon. 726 + typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='โ–ฒ' 727 + 728 + ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### 729 + # Nnn shell color. 730 + typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 731 + # Custom icon. 732 + # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='โญ' 733 + 734 + ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]####################### 735 + # lf shell color. 736 + typeset -g POWERLEVEL9K_LF_FOREGROUND=72 737 + # Custom icon. 738 + # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='โญ' 739 + 740 + ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## 741 + # xplr shell color. 742 + typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 743 + # Custom icon. 744 + # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='โญ' 745 + 746 + ###########################[ vim_shell: vim shell indicator (:sh) ]########################### 747 + # Vim shell indicator color. 748 + typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 749 + # Custom icon. 750 + # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='โญ' 751 + 752 + ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### 753 + # Midnight Commander shell color. 754 + typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 755 + # Custom icon. 756 + # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='โญ' 757 + 758 + #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## 759 + # Nix shell color. 760 + typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 761 + 762 + # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. 763 + # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= 764 + 765 + # Custom icon. 766 + # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='โญ' 767 + 768 + ##################################[ disk_usage: disk usage ]################################## 769 + # Colors for different levels of disk usage. 770 + typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 771 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 772 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 773 + # Thresholds for different levels of disk usage (percentage points). 774 + typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 775 + typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 776 + # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. 777 + typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false 778 + # Custom icon. 779 + # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='โญ' 780 + 781 + ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### 782 + # Text and color for normal (a.k.a. command) vi mode. 783 + typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL 784 + typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 785 + # Text and color for visual vi mode. 786 + typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL 787 + typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 788 + # Text and color for overtype (a.k.a. overwrite and replace) vi mode. 789 + typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE 790 + typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 791 + # Text and color for insert vi mode. 792 + typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= 793 + typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 794 + 795 + # Custom icon. 796 + typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='โ–ฒ' 797 + 798 + ######################################[ ram: free RAM ]####################################### 799 + # RAM color. 800 + typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 801 + # Custom icon. 802 + # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='โญ' 803 + 804 + #####################################[ swap: used swap ]###################################### 805 + # Swap color. 806 + typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 807 + # Custom icon. 808 + # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='โญ' 809 + 810 + ######################################[ load: CPU load ]###################################### 811 + # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. 812 + typeset -g POWERLEVEL9K_LOAD_WHICH=5 813 + # Load color when load is under 50%. 814 + typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 815 + # Load color when load is between 50% and 70%. 816 + typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 817 + # Load color when load is over 70%. 818 + typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 819 + # Custom icon. 820 + # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='โญ' 821 + 822 + ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ 823 + # Todo color. 824 + typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 825 + # Hide todo when the total number of tasks is zero. 826 + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true 827 + # Hide todo when the number of tasks after filtering is zero. 828 + typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false 829 + 830 + # Todo format. The following parameters are available within the expansion. 831 + # 832 + # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. 833 + # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. 834 + # 835 + # These variables correspond to the last line of the output of `todo.sh -p ls`: 836 + # 837 + # TODO: 24 of 42 tasks shown 838 + # 839 + # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. 840 + # 841 + # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' 842 + 843 + # Custom icon. 844 + # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='โญ' 845 + 846 + ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ 847 + # Timewarrior color. 848 + typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 849 + # If the tracked task is longer than 24 characters, truncate and append "โ€ฆ". 850 + # Tip: To always display tasks without truncation, delete the following parameter. 851 + # Tip: To hide task names and display just the icon when time tracking is enabled, set the 852 + # value of the following parameter to "". 853 + typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+โ€ฆ}' 854 + 855 + # Custom icon. 856 + # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='โญ' 857 + 858 + ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## 859 + # Taskwarrior color. 860 + typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 861 + 862 + # Taskwarrior segment format. The following parameters are available within the expansion. 863 + # 864 + # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. 865 + # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. 866 + # 867 + # Zero values are represented as empty parameters. 868 + # 869 + # The default format: 870 + # 871 + # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' 872 + # 873 + # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' 874 + 875 + # Custom icon. 876 + # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='โญ' 877 + 878 + ################################[ cpu_arch: CPU architecture ]################################ 879 + # CPU architecture color. 880 + typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172 881 + 882 + # Hide the segment when on a specific CPU architecture. 883 + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION= 884 + # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION= 885 + 886 + # Custom icon. 887 + # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='โญ' 888 + 889 + ##################################[ context: user@hostname ]################################## 890 + # Context color when running with privileges. 891 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 892 + # Context color in SSH without privileges. 893 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 894 + # Default context color (no privileges, no SSH). 895 + typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 896 + 897 + # Context format when running with privileges: bold user@hostname. 898 + typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' 899 + # Context format when in SSH without privileges: user@hostname. 900 + typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' 901 + # Default context format (no privileges, no SSH): user@hostname. 902 + typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' 903 + 904 + # Don't show context unless running with privileges or in SSH. 905 + # Tip: Remove the next line to always show context. 906 + typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= 907 + 908 + # Custom icon. 909 + # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='โญ' 910 + # Custom prefix. 911 + # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%244Fwith ' 912 + 913 + ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### 914 + # Python virtual environment color. 915 + typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 916 + # Don't show Python version next to the virtual environment name. 917 + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false 918 + # If set to "false", won't show virtualenv if pyenv is already shown. 919 + # If set to "if-different", won't show virtualenv if it's the same as pyenv. 920 + typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false 921 + # Separate environment name from Python version only with a space. 922 + typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= 923 + # Custom icon. 924 + # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 925 + 926 + #####################[ anaconda: conda environment (https://conda.io/) ]###################### 927 + # Anaconda environment color. 928 + typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 929 + 930 + # Anaconda segment format. The following parameters are available within the expansion. 931 + # 932 + # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. 933 + # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. 934 + # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). 935 + # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). 936 + # 937 + # CONDA_PROMPT_MODIFIER can be configured with the following command: 938 + # 939 + # conda config --set env_prompt '({default_env}) ' 940 + # 941 + # The last argument is a Python format string that can use the following variables: 942 + # 943 + # - prefix The same as CONDA_PREFIX. 944 + # - default_env The same as CONDA_DEFAULT_ENV. 945 + # - name The last segment of CONDA_PREFIX. 946 + # - stacked_env Comma-separated list of names in the environment stack. The first element is 947 + # always the same as default_env. 948 + # 949 + # Note: '({default_env}) ' is the default value of env_prompt. 950 + # 951 + # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER 952 + # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former 953 + # is empty. 954 + typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' 955 + 956 + # Custom icon. 957 + # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='โญ' 958 + 959 + ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ 960 + # Pyenv color. 961 + typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 962 + # Hide python version if it doesn't come from one of these sources. 963 + typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) 964 + # If set to false, hide python version if it's the same as global: 965 + # $(pyenv version-name) == $(pyenv global). 966 + typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false 967 + # If set to false, hide python version if it's equal to "system". 968 + typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true 969 + 970 + # Pyenv segment format. The following parameters are available within the expansion. 971 + # 972 + # - P9K_CONTENT Current pyenv environment (pyenv version-name). 973 + # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). 974 + # 975 + # The default format has the following logic: 976 + # 977 + # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or 978 + # starts with "$P9K_PYENV_PYTHON_VERSION/". 979 + # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". 980 + typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' 981 + 982 + # Custom icon. 983 + # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 984 + 985 + ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ 986 + # Goenv color. 987 + typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 988 + # Hide go version if it doesn't come from one of these sources. 989 + typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) 990 + # If set to false, hide go version if it's the same as global: 991 + # $(goenv version-name) == $(goenv global). 992 + typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false 993 + # If set to false, hide go version if it's equal to "system". 994 + typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true 995 + # Custom icon. 996 + # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 997 + 998 + ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## 999 + # Nodenv color. 1000 + typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 1001 + # Hide node version if it doesn't come from one of these sources. 1002 + typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) 1003 + # If set to false, hide node version if it's the same as global: 1004 + # $(nodenv version-name) == $(nodenv global). 1005 + typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false 1006 + # If set to false, hide node version if it's equal to "system". 1007 + typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true 1008 + # Custom icon. 1009 + # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1010 + 1011 + ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### 1012 + # Nvm color. 1013 + typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 1014 + # Custom icon. 1015 + # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 1016 + 1017 + ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ 1018 + # Nodeenv color. 1019 + typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 1020 + # Don't show Node version next to the environment name. 1021 + typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false 1022 + # Separate environment name from Node version only with a space. 1023 + typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= 1024 + # Custom icon. 1025 + # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1026 + 1027 + ##############################[ node_version: node.js version ]############################### 1028 + # Node version color. 1029 + typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 1030 + # Show node version only when in a directory tree containing package.json. 1031 + typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true 1032 + # Custom icon. 1033 + # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1034 + 1035 + #######################[ go_version: go version (https://golang.org) ]######################## 1036 + # Go version color. 1037 + typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 1038 + # Show go version only when in a go project subdirectory. 1039 + typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true 1040 + # Custom icon. 1041 + # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1042 + 1043 + #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## 1044 + # Rust version color. 1045 + typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 1046 + # Show rust version only when in a rust project subdirectory. 1047 + typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true 1048 + # Custom icon. 1049 + # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1050 + 1051 + ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ 1052 + # .NET version color. 1053 + typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 1054 + # Show .NET version only when in a .NET project subdirectory. 1055 + typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true 1056 + # Custom icon. 1057 + # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1058 + 1059 + #####################[ php_version: php version (https://www.php.net/) ]###################### 1060 + # PHP version color. 1061 + typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 1062 + # Show PHP version only when in a PHP project subdirectory. 1063 + typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true 1064 + # Custom icon. 1065 + # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1066 + 1067 + ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### 1068 + # Laravel version color. 1069 + typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 1070 + # Custom icon. 1071 + # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1072 + 1073 + ####################[ java_version: java version (https://www.java.com/) ]#################### 1074 + # Java version color. 1075 + typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 1076 + # Show java version only when in a java project subdirectory. 1077 + typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true 1078 + # Show brief version. 1079 + typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false 1080 + # Custom icon. 1081 + # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1082 + 1083 + ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### 1084 + # Package color. 1085 + typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 1086 + # Package format. The following parameters are available within the expansion. 1087 + # 1088 + # - P9K_PACKAGE_NAME The value of `name` field in package.json. 1089 + # - P9K_PACKAGE_VERSION The value of `version` field in package.json. 1090 + # 1091 + # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' 1092 + # Custom icon. 1093 + # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='โญ' 1094 + 1095 + #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## 1096 + # Rbenv color. 1097 + typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 1098 + # Hide ruby version if it doesn't come from one of these sources. 1099 + typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) 1100 + # If set to false, hide ruby version if it's the same as global: 1101 + # $(rbenv version-name) == $(rbenv global). 1102 + typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false 1103 + # If set to false, hide ruby version if it's equal to "system". 1104 + typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true 1105 + # Custom icon. 1106 + # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1107 + 1108 + #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## 1109 + # Rvm color. 1110 + typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 1111 + # Don't show @gemset at the end. 1112 + typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false 1113 + # Don't show ruby- at the front. 1114 + typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false 1115 + # Custom icon. 1116 + # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 1117 + 1118 + ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ 1119 + # Fvm color. 1120 + typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 1121 + # Custom icon. 1122 + # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='โญ' 1123 + 1124 + ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### 1125 + # Lua color. 1126 + typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 1127 + # Hide lua version if it doesn't come from one of these sources. 1128 + typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) 1129 + # If set to false, hide lua version if it's the same as global: 1130 + # $(luaenv version-name) == $(luaenv global). 1131 + typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false 1132 + # If set to false, hide lua version if it's equal to "system". 1133 + typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true 1134 + # Custom icon. 1135 + # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1136 + 1137 + ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ 1138 + # Java color. 1139 + typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 1140 + # Hide java version if it doesn't come from one of these sources. 1141 + typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) 1142 + # If set to false, hide java version if it's the same as global: 1143 + # $(jenv version-name) == $(jenv global). 1144 + typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false 1145 + # If set to false, hide java version if it's equal to "system". 1146 + typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true 1147 + # Custom icon. 1148 + # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1149 + 1150 + ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ 1151 + # Perl color. 1152 + typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 1153 + # Hide perl version if it doesn't come from one of these sources. 1154 + typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) 1155 + # If set to false, hide perl version if it's the same as global: 1156 + # $(plenv version-name) == $(plenv global). 1157 + typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false 1158 + # If set to false, hide perl version if it's equal to "system". 1159 + typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true 1160 + # Custom icon. 1161 + # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1162 + 1163 + ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############ 1164 + # Perlbrew color. 1165 + typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67 1166 + # Show perlbrew version only when in a perl project subdirectory. 1167 + typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true 1168 + # Don't show "perl-" at the front. 1169 + typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false 1170 + # Custom icon. 1171 + # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='โญ' 1172 + 1173 + ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ 1174 + # PHP color. 1175 + typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 1176 + # Hide php version if it doesn't come from one of these sources. 1177 + typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) 1178 + # If set to false, hide php version if it's the same as global: 1179 + # $(phpenv version-name) == $(phpenv global). 1180 + typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false 1181 + # If set to false, hide php version if it's equal to "system". 1182 + typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true 1183 + # Custom icon. 1184 + # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1185 + 1186 + #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### 1187 + # Scala color. 1188 + typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 1189 + # Hide scala version if it doesn't come from one of these sources. 1190 + typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) 1191 + # If set to false, hide scala version if it's the same as global: 1192 + # $(scalaenv version-name) == $(scalaenv global). 1193 + typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false 1194 + # If set to false, hide scala version if it's equal to "system". 1195 + typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true 1196 + # Custom icon. 1197 + # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='โญ' 1198 + 1199 + ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### 1200 + # Haskell color. 1201 + typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 1202 + # Hide haskell version if it doesn't come from one of these sources. 1203 + # 1204 + # shell: version is set by STACK_YAML 1205 + # local: version is set by stack.yaml up the directory tree 1206 + # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) 1207 + typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) 1208 + # If set to false, hide haskell version if it's the same as in the implicit global project. 1209 + typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true 1210 + # Custom icon. 1211 + # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='โญ' 1212 + 1213 + ################[ terraform: terraform workspace (https://www.terraform.io) ]################# 1214 + # Don't show terraform workspace if it's literally "default". 1215 + typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false 1216 + # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element 1217 + # in each pair defines a pattern against which the current terraform workspace gets matched. 1218 + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1219 + # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, 1220 + # you'll see this value in your prompt. The second element of each pair in 1221 + # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The 1222 + # first match wins. 1223 + # 1224 + # For example, given these settings: 1225 + # 1226 + # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1227 + # '*prod*' PROD 1228 + # '*test*' TEST 1229 + # '*' OTHER) 1230 + # 1231 + # If your current terraform workspace is "project_test", its class is TEST because "project_test" 1232 + # doesn't match the pattern '*prod*' but does match '*test*'. 1233 + # 1234 + # You can define different colors, icons and content expansions for different classes: 1235 + # 1236 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 1237 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1238 + # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1239 + typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( 1240 + # '*prod*' PROD # These values are examples that are unlikely 1241 + # '*test*' TEST # to match your needs. Customize them as needed. 1242 + '*' OTHER) 1243 + typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 1244 + # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='โญ' 1245 + 1246 + #############[ terraform_version: terraform version (https://www.terraform.io) ]############## 1247 + # Terraform version color. 1248 + typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 1249 + # Custom icon. 1250 + # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='โญ' 1251 + 1252 + #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# 1253 + # Show kubecontext only when the command you are typing invokes one of these tools. 1254 + # Tip: Remove the next line to always show kubecontext. 1255 + typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent' 1256 + 1257 + # Kubernetes context classes for the purpose of using different colors, icons and expansions with 1258 + # different contexts. 1259 + # 1260 + # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element 1261 + # in each pair defines a pattern against which the current kubernetes context gets matched. 1262 + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1263 + # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, 1264 + # you'll see this value in your prompt. The second element of each pair in 1265 + # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The 1266 + # first match wins. 1267 + # 1268 + # For example, given these settings: 1269 + # 1270 + # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1271 + # '*prod*' PROD 1272 + # '*test*' TEST 1273 + # '*' DEFAULT) 1274 + # 1275 + # If your current kubernetes context is "deathray-testing/default", its class is TEST 1276 + # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. 1277 + # 1278 + # You can define different colors, icons and content expansions for different classes: 1279 + # 1280 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 1281 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1282 + # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1283 + typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( 1284 + # '*prod*' PROD # These values are examples that are unlikely 1285 + # '*test*' TEST # to match your needs. Customize them as needed. 1286 + '*' DEFAULT) 1287 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 1288 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โ—‹' 1289 + 1290 + # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext 1291 + # segment. Parameter expansions are very flexible and fast, too. See reference: 1292 + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1293 + # 1294 + # Within the expansion the following parameters are always available: 1295 + # 1296 + # - P9K_CONTENT The content that would've been displayed if there was no content 1297 + # expansion defined. 1298 + # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the 1299 + # output of `kubectl config get-contexts`. 1300 + # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the 1301 + # output of `kubectl config get-contexts`. 1302 + # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE 1303 + # in the output of `kubectl config get-contexts`. If there is no 1304 + # namespace, the parameter is set to "default". 1305 + # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the 1306 + # output of `kubectl config get-contexts`. 1307 + # 1308 + # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), 1309 + # the following extra parameters are available: 1310 + # 1311 + # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". 1312 + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. 1313 + # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. 1314 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. 1315 + # 1316 + # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, 1317 + # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": 1318 + # 1319 + # - P9K_KUBECONTEXT_CLOUD_NAME=gke 1320 + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account 1321 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a 1322 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1323 + # 1324 + # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": 1325 + # 1326 + # - P9K_KUBECONTEXT_CLOUD_NAME=eks 1327 + # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 1328 + # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 1329 + # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 1330 + typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= 1331 + # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. 1332 + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' 1333 + # Append the current context's namespace if it's not "default". 1334 + POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' 1335 + 1336 + # Custom prefix. 1337 + # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%244Fat ' 1338 + 1339 + #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# 1340 + # Show aws only when the command you are typing invokes one of these tools. 1341 + # Tip: Remove the next line to always show aws. 1342 + typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' 1343 + 1344 + # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element 1345 + # in each pair defines a pattern against which the current AWS profile gets matched. 1346 + # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) 1347 + # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, 1348 + # you'll see this value in your prompt. The second element of each pair in 1349 + # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The 1350 + # first match wins. 1351 + # 1352 + # For example, given these settings: 1353 + # 1354 + # typeset -g POWERLEVEL9K_AWS_CLASSES=( 1355 + # '*prod*' PROD 1356 + # '*test*' TEST 1357 + # '*' DEFAULT) 1358 + # 1359 + # If your current AWS profile is "company_test", its class is TEST 1360 + # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. 1361 + # 1362 + # You can define different colors, icons and content expansions for different classes: 1363 + # 1364 + # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 1365 + # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1366 + # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' 1367 + typeset -g POWERLEVEL9K_AWS_CLASSES=( 1368 + # '*prod*' PROD # These values are examples that are unlikely 1369 + # '*test*' TEST # to match your needs. Customize them as needed. 1370 + '*' DEFAULT) 1371 + typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 1372 + # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โญ' 1373 + 1374 + # AWS segment format. The following parameters are available within the expansion. 1375 + # 1376 + # - P9K_AWS_PROFILE The name of the current AWS profile. 1377 + # - P9K_AWS_REGION The region associated with the current AWS profile. 1378 + typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' 1379 + 1380 + #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# 1381 + # AWS Elastic Beanstalk environment color. 1382 + typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 1383 + # Custom icon. 1384 + typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='eb' 1385 + 1386 + ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## 1387 + # Show azure only when the command you are typing invokes one of these tools. 1388 + # Tip: Remove the next line to always show azure. 1389 + typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' 1390 + # Azure account name color. 1391 + typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 1392 + # Custom icon. 1393 + typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='az' 1394 + 1395 + ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### 1396 + # Show gcloud only when the command you are typing invokes one of these tools. 1397 + # Tip: Remove the next line to always show gcloud. 1398 + typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' 1399 + # Google cloud color. 1400 + typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 1401 + 1402 + # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or 1403 + # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative 1404 + # enough. You can use the following parameters in the expansions. Each of them corresponds to the 1405 + # output of `gcloud` tool. 1406 + # 1407 + # Parameter | Source 1408 + # -------------------------|-------------------------------------------------------------------- 1409 + # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' 1410 + # P9K_GCLOUD_ACCOUNT | gcloud config get-value account 1411 + # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project 1412 + # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' 1413 + # 1414 + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. 1415 + # 1416 + # Obtaining project name requires sending a request to Google servers. This can take a long time 1417 + # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud 1418 + # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets 1419 + # set and gcloud prompt segment transitions to state COMPLETE. 1420 + # 1421 + # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL 1422 + # and COMPLETE. You can also hide gcloud in state PARTIAL by setting 1423 + # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and 1424 + # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. 1425 + typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' 1426 + typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' 1427 + 1428 + # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name 1429 + # this often. Negative value disables periodic polling. In this mode project name is retrieved 1430 + # only when the current configuration, account or project id changes. 1431 + typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 1432 + 1433 + # Custom icon. 1434 + # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='โญ' 1435 + 1436 + #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# 1437 + # Show google_app_cred only when the command you are typing invokes one of these tools. 1438 + # Tip: Remove the next line to always show google_app_cred. 1439 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' 1440 + 1441 + # Google application credentials classes for the purpose of using different colors, icons and 1442 + # expansions with different credentials. 1443 + # 1444 + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first 1445 + # element in each pair defines a pattern against which the current kubernetes context gets 1446 + # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion 1447 + # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION 1448 + # parameters, you'll see this value in your prompt. The second element of each pair in 1449 + # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. 1450 + # The first match wins. 1451 + # 1452 + # For example, given these settings: 1453 + # 1454 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1455 + # '*:*prod*:*' PROD 1456 + # '*:*test*:*' TEST 1457 + # '*' DEFAULT) 1458 + # 1459 + # If your current Google application credentials is "service_account deathray-testing x@y.com", 1460 + # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. 1461 + # 1462 + # You can define different colors, icons and content expansions for different classes: 1463 + # 1464 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 1465 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='โญ' 1466 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' 1467 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( 1468 + # '*:*prod*:*' PROD # These values are examples that are unlikely 1469 + # '*:*test*:*' TEST # to match your needs. Customize them as needed. 1470 + '*' DEFAULT) 1471 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 1472 + # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='โญ' 1473 + 1474 + # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by 1475 + # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: 1476 + # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. 1477 + # 1478 + # You can use the following parameters in the expansion. Each of them corresponds to one of the 1479 + # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. 1480 + # 1481 + # Parameter | JSON key file field 1482 + # ---------------------------------+--------------- 1483 + # P9K_GOOGLE_APP_CRED_TYPE | type 1484 + # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id 1485 + # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email 1486 + # 1487 + # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. 1488 + typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' 1489 + 1490 + ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### 1491 + # Toolbox color. 1492 + typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 1493 + # Don't display the name of the toolbox if it matches fedora-toolbox-*. 1494 + typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' 1495 + # Custom icon. 1496 + # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='โญ' 1497 + # Custom prefix. 1498 + # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%244Fin ' 1499 + 1500 + ###############################[ public_ip: public IP address ]############################### 1501 + # Public IP color. 1502 + typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 1503 + # Custom icon. 1504 + # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1505 + 1506 + ########################[ vpn_ip: virtual private network indicator ]######################### 1507 + # VPN IP color. 1508 + typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 1509 + # When on VPN, show just an icon without the IP address. 1510 + # Tip: To display the private IP address when on VPN, remove the next line. 1511 + typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= 1512 + # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN 1513 + # to see the name of the interface. 1514 + typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' 1515 + # If set to true, show one segment per matching network interface. If set to false, show only 1516 + # one segment corresponding to the first matching network interface. 1517 + # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. 1518 + typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false 1519 + # Custom icon. 1520 + # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1521 + 1522 + ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### 1523 + # IP color. 1524 + typeset -g POWERLEVEL9K_IP_FOREGROUND=38 1525 + # The following parameters are accessible within the expansion: 1526 + # 1527 + # Parameter | Meaning 1528 + # ----------------------+------------------------------------------- 1529 + # P9K_IP_IP | IP address 1530 + # P9K_IP_INTERFACE | network interface 1531 + # P9K_IP_RX_BYTES | total number of bytes received 1532 + # P9K_IP_TX_BYTES | total number of bytes sent 1533 + # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt 1534 + # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt 1535 + # P9K_IP_RX_RATE | receive rate (since last prompt) 1536 + # P9K_IP_TX_RATE | send rate (since last prompt) 1537 + typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70Fโ‡ฃ$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215Fโ‡ก$P9K_IP_TX_RATE }%38F$P9K_IP_IP' 1538 + # Show information for the first network interface whose name matches this regular expression. 1539 + # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. 1540 + typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' 1541 + # Custom icon. 1542 + # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='โญ' 1543 + 1544 + #########################[ proxy: system-wide http/https/ftp proxy ]########################## 1545 + # Proxy color. 1546 + typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 1547 + # Custom icon. 1548 + # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='โญ' 1549 + 1550 + ################################[ battery: internal battery ]################################# 1551 + # Show battery in red when it's below this level and not connected to power supply. 1552 + typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 1553 + typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 1554 + # Show battery in green when it's charging or fully charged. 1555 + typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 1556 + # Show battery in yellow when it's discharging. 1557 + typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 1558 + # Battery pictograms going from low to high level of charge. 1559 + typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}โ–' '%K{232}โ–‚' '%K{232}โ–ƒ' '%K{232}โ–„' '%K{232}โ–…' '%K{232}โ–†' '%K{232}โ–‡' '%K{232}โ–ˆ') 1560 + # Don't show the remaining time to charge/discharge. 1561 + typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false 1562 + 1563 + #####################################[ wifi: wifi speed ]##################################### 1564 + # WiFi color. 1565 + typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 1566 + # Custom icon. 1567 + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='โญ' 1568 + 1569 + # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). 1570 + # 1571 + # # Wifi colors and icons for different signal strength levels (low to high). 1572 + # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values 1573 + # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values 1574 + # 1575 + # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' 1576 + # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' 1577 + # 1578 + # The following parameters are accessible within the expansions: 1579 + # 1580 + # Parameter | Meaning 1581 + # ----------------------+--------------- 1582 + # P9K_WIFI_SSID | service set identifier, a.k.a. network name 1583 + # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown 1584 + # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second 1585 + # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 1586 + # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 1587 + # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) 1588 + 1589 + ####################################[ time: current time ]#################################### 1590 + # Current time color. 1591 + typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 1592 + # Format for the current time: 09:51:02. See `man 3 strftime`. 1593 + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' 1594 + # If set to true, time will update when you hit enter. This way prompts for the past 1595 + # commands will contain the start times of their commands as opposed to the default 1596 + # behavior where they contain the end times of their preceding commands. 1597 + typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false 1598 + # Custom icon. 1599 + typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION= 1600 + # Custom prefix. 1601 + # typeset -g POWERLEVEL9K_TIME_PREFIX='%244Fat ' 1602 + 1603 + # Example of a user-defined prompt segment. Function prompt_example will be called on every 1604 + # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or 1605 + # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. 1606 + # 1607 + # Type `p10k help segment` for documentation and a more sophisticated example. 1608 + function prompt_example() { 1609 + p10k segment -f 208 -i 'โญ' -t 'hello, %n' 1610 + } 1611 + 1612 + # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job 1613 + # is to generate the prompt segment for display in instant prompt. See 1614 + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1615 + # 1616 + # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function 1617 + # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k 1618 + # will replay these calls without actually calling instant_prompt_*. It is imperative that 1619 + # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this 1620 + # rule is not observed, the content of instant prompt will be incorrect. 1621 + # 1622 + # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If 1623 + # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. 1624 + function instant_prompt_example() { 1625 + # Since prompt_example always makes the same `p10k segment` calls, we can call it from 1626 + # instant_prompt_example. This will give us the same `example` prompt segment in the instant 1627 + # and regular prompts. 1628 + prompt_example 1629 + } 1630 + 1631 + # User-defined prompt segments can be customized the same way as built-in segments. 1632 + # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 1633 + # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='โญ' 1634 + 1635 + # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt 1636 + # when accepting a command line. Supported values: 1637 + # 1638 + # - off: Don't change prompt when accepting a command line. 1639 + # - always: Trim down prompt when accepting a command line. 1640 + # - same-dir: Trim down prompt when accepting a command line unless this is the first command 1641 + # typed after changing current working directory. 1642 + typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always 1643 + 1644 + # Instant prompt mode. 1645 + # 1646 + # - off: Disable instant prompt. Choose this if you've tried instant prompt and found 1647 + # it incompatible with your zsh configuration files. 1648 + # - quiet: Enable instant prompt and don't print warnings when detecting console output 1649 + # during zsh initialization. Choose this if you've read and understood 1650 + # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. 1651 + # - verbose: Enable instant prompt and print a warning when detecting console output during 1652 + # zsh initialization. Choose this if you've never tried instant prompt, haven't 1653 + # seen the warning, or if you are unsure what this all means. 1654 + typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose 1655 + 1656 + # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. 1657 + # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload 1658 + # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you 1659 + # really need it. 1660 + typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true 1661 + 1662 + # If p10k is already loaded, reload configuration. 1663 + # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. 1664 + (( ! $+functions[p10k] )) || p10k reload 1665 + } 1666 + 1667 + # Tell `p10k configure` which file it should overwrite. 1668 + typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} 1669 + 1670 + (( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} 1671 + 'builtin' 'unset' 'p10k_config_opts'
+17
home/modules/programs/rbw/default.nix
··· 1 + _: { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: let 7 + cfg = config.programs.rbw; 8 + in { 9 + config = lib.mkIf cfg.enable { 10 + programs.rbw.settings = { 11 + inherit (pkgs) pinentry; 12 + 13 + email = "timmelzer@gmail.com"; 14 + base_url = "https://passwords.mimas.internal.nobbz.dev"; 15 + }; 16 + }; 17 + }
+60
home/modules/programs/wezterm/default.nix
··· 1 + _: { 2 + config, 3 + pkgs, 4 + ... 5 + }: { 6 + home.packages = [pkgs.wezterm]; 7 + 8 + xdg.configFile."wezterm/wezterm.lua".text = 9 + # lua 10 + '' 11 + -- Pull in the wezterm API 12 + local wezterm = require 'wezterm' 13 + 14 + -- This table will hold the configuration. 15 + local config = {} 16 + 17 + -- In newer versions of wezterm, use the config_builder which will 18 + -- help provide clearer error messages 19 + if wezterm.config_builder then 20 + config = wezterm.config_builder() 21 + end 22 + 23 + -- This is where you actually apply your config choices 24 + 25 + -- bells 26 + config.audible_bell = "Disabled" 27 + config.visual_bell = { 28 + fade_in_function = "EaseIn", 29 + fade_in_duration_ms = 150, 30 + fade_out_function = "EaseOut", 31 + fade_out_duration_ms = 150, 32 + } 33 + 34 + -- For example, changing the color scheme: 35 + config.color_scheme = "Catppuccin Mocha" 36 + 37 + -- show a scrollbar 38 + config.enable_scroll_bar = true 39 + 40 + -- forbid window size change on change of fontsize 41 + config.adjust_window_size_when_changing_font_size = false 42 + 43 + -- disable ligatures 44 + config.harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' } 45 + 46 + -- set the font 47 + config.font_dirs = { '${pkgs.departure-mono}/share/fonts/otf' } 48 + config.font_size = 11.0 * 1.25 49 + config.font = wezterm.font("Departure Mono") 50 + 51 + -- setting up keybindings 52 + config.keys = { 53 + -- The default is `C-Z` (so also pressing SHIFT), I prefer to not have SHIFT pressed 54 + { key = 'z', mods = 'CTRL', action = wezterm.action.TogglePaneZoomState, }, 55 + } 56 + 57 + -- and finally, return the configuration to wezterm 58 + return config 59 + ''; 60 + }
-47
home/modules/programs/zshell/default.nix
··· 1 - _: { 2 - config, 3 - lib, 4 - ... 5 - }: let 6 - cfg = config.programs.zshell; 7 - aliasesStr = 8 - lib.concatStringsSep "\n" 9 - (lib.mapAttrsToList (k: v: "alias ${k}=${lib.escapeShellArg v}") 10 - cfg.aliases); 11 - sourcesStr = 12 - lib.concatStringsSep "\n" (builtins.map (s: ". ${s}") cfg.sources); 13 - in { 14 - options.programs.zshell = { 15 - aliases = lib.mkOption { 16 - default = {}; 17 - example = { 18 - ll = "ls -l"; 19 - ".." = "cd .."; 20 - }; 21 - description = '' 22 - An attribute set that maps aliases (the top level attribute names in 23 - this option) to command strings or directly to build outputs. 24 - ''; 25 - type = lib.types.attrsOf lib.types.str; 26 - }; 27 - sources = lib.mkOption { 28 - default = []; 29 - type = lib.types.listOf lib.types.str; 30 - }; 31 - }; 32 - 33 - config = { 34 - home.file = { 35 - ".zsh/boot/aliases.zsh" = { 36 - text = '' 37 - ${aliasesStr} 38 - ''; 39 - }; 40 - ".zsh/boot/sourcing.zsh" = { 41 - text = '' 42 - ${sourcesStr} 43 - ''; 44 - }; 45 - }; 46 - }; 47 - }
+12 -2
home/modules/services/insync/default.nix
··· 1 - {self, ...}: { 1 + { 2 + self, 3 + nixpkgs-insync-v3, 4 + ... 5 + }: { 2 6 config, 3 7 lib, 4 8 pkgs, ··· 11 15 12 16 package = lib.mkOption { 13 17 type = lib.types.package; 14 - default = pkgs.insync; 18 + default = let 19 + ipkgs = import nixpkgs-insync-v3 { 20 + inherit (pkgs) system; 21 + inherit (config.nixpkgs) config; 22 + }; 23 + in 24 + ipkgs.insync; 15 25 description = '' 16 26 The insync package to use. 17 27
-46
home/modules/services/keyleds/default.nix
··· 1 - {self, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: let 7 - cfg = config.services.keyleds; 8 - self' = self.packages.x86_64-linux; 9 - in { 10 - options.services.keyleds = { 11 - enable = 12 - lib.mkEnableOption 13 - "Logitech Keyboard animation for Linux โ€” G410, G513, G610, G810, G910, GPro"; 14 - 15 - package = lib.mkOption { 16 - type = lib.types.package; 17 - default = self'.keyleds; 18 - defaultText = lib.literalExample "pkgs.keyleds"; 19 - example = lib.literalExample "pkgs.keyleds"; 20 - description = '' 21 - Keyleds derivation to use. 22 - ''; 23 - }; 24 - }; 25 - 26 - config = lib.mkIf cfg.enable { 27 - home.packages = [cfg.package]; 28 - 29 - systemd.user.services.keyleds = { 30 - Unit = { 31 - Description = "Logitech Keyboard animation for Linux โ€” G410, G513, G610, G810, G910, GPro"; 32 - After = ["graphical-session-pre.target"]; 33 - PartOf = ["graphical-session.target"]; 34 - }; 35 - 36 - Install = {WantedBy = ["graphical-session.target"];}; 37 - 38 - Service = { 39 - Environment = "XDG_DATA_DIRS=${cfg.package}/share"; 40 - ExecStart = "${cfg.package}/bin/keyledsd --config ${cfg.package}/share/keyledsd/keyledsd.conf.sample"; 41 - Restart = "always"; 42 - RestartSec = 3; 43 - }; 44 - }; 45 - }; 46 - }
-78
home/modules/services/restic/default.nix
··· 1 - {self, ...}: { 2 - config, 3 - lib, 4 - pkgs, 5 - self, 6 - ... 7 - }: let 8 - cfg = config.services.restic; 9 - 10 - bin = "${cfg.package}/bin/restic"; 11 - excludes = __concatStringsSep " " (builtins.map (e: "--exclude=${e}") cfg.exclude); 12 - xFlags = lib.optionalString cfg.oneFileSystem "-x"; 13 - flags = "${xFlags} ${excludes}"; 14 - 15 - command = "${bin} --tag home -vv backup ${flags} %h"; 16 - in { 17 - options.services.restic = { 18 - enable = lib.mkEnableOption "Restic Backup Tool"; 19 - 20 - package = lib.mkOption { 21 - type = lib.types.package; 22 - default = pkgs.restic; 23 - description = "Restic derivation to use"; 24 - }; 25 - 26 - exclude = lib.mkOption { 27 - type = lib.types.listOf lib.types.str; 28 - default = []; 29 - description = "Corresponds to `--exclude`. Use `%h` instead of `~`"; 30 - }; 31 - 32 - oneFileSystem = lib.mkOption { 33 - type = lib.types.bool; 34 - default = false; 35 - description = "If true, exclude other file systems, don't cross filesystem boundaries and subvolumes"; 36 - }; 37 - 38 - repo = lib.mkOption { 39 - type = lib.types.str; 40 - description = "Location of the repository"; 41 - }; 42 - 43 - # TODO: Add options for inlcude, password file, etc 44 - }; 45 - 46 - config = lib.mkIf cfg.enable { 47 - home.packages = [cfg.package]; 48 - 49 - systemd.user.services.restic-backup = { 50 - Unit = { 51 - Description = "Restic Backup Tool"; 52 - StartLimitIntervalSec = "25m"; 53 - StartLimitBurst = "4"; 54 - }; 55 - 56 - Service = { 57 - Environment = [ 58 - "PATH=${lib.makeBinPath [pkgs.openssh]}" 59 - "RESTIC_PASSWORD_FILE=%h/.config/restic/password" 60 - "RESTIC_REPOSITORY=${cfg.repo}" 61 - ]; 62 - Type = "oneshot"; 63 - ExecStart = command; 64 - Restart = "on-failure"; 65 - RestartSec = "2m"; 66 - }; 67 - }; 68 - 69 - systemd.user.timers.restic-backup = { 70 - Unit.Description = "Restic periodic backup"; 71 - Timer = { 72 - Unit = "restic-backup.service"; 73 - OnCalendar = "*:0/15"; 74 - }; 75 - Install.WantedBy = ["timers.target"]; 76 - }; 77 - }; 78 - }
+135
home/modules/services/rustic/default.nix
··· 1 + _: { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: let 7 + cfg = config.services.rustic; 8 + 9 + bin = lib.getExe cfg.package; 10 + 11 + globs = let lines = map (g: "${g}\n") cfg.globs; in lib.concatStrings lines; 12 + globsFile = pkgs.writeText "globs" globs; 13 + globFlags = lib.optionals (cfg.globs != []) ["--glob-file" globsFile]; 14 + 15 + oneFsFlags = lib.optional cfg.oneFileSystem "-x"; 16 + 17 + flagList = ["--tag" "home"] ++ globFlags ++ oneFsFlags; 18 + flags = lib.concatStringsSep " " flagList; 19 + 20 + command = "${bin} backup ${flags} %h"; 21 + 22 + profileModule = { 23 + name, 24 + config, 25 + ... 26 + }: { 27 + enable = lib.mkEnableOption name // {default = true;}; 28 + 29 + repo = lib.mkOption { 30 + type = lib.types.str; 31 + description = "Location of the repository"; 32 + }; 33 + 34 + globs = lib.mkOption { 35 + type = lib.types.listOf lib.types.str; 36 + default = []; 37 + description = "Patterns to apply to backup. Use a hardcoded prefix for the home directory"; 38 + }; 39 + 40 + oneFileSystem = lib.mkOption { 41 + type = lib.types.bool; 42 + default = false; 43 + description = "If true, exclude other file systems, don't cross filesystem boundaries and subvolumes"; 44 + }; 45 + 46 + passwordFile = lib.mkOption { 47 + type = lib.types.path; 48 + default = "${config.xdg.configHome}/rustic/password"; 49 + description = "Location of the password file"; 50 + }; 51 + 52 + source = lib.mkOption { 53 + type = lib.types.path; 54 + description = "Location of the base directory for the backup.Of "; 55 + }; 56 + 57 + settings = lib.mkOption { 58 + type = lib.types.attrsOf lib.types.any; 59 + description = "A nix representation of the profile settings which gets converted to a TOML file"; 60 + }; 61 + }; 62 + in { 63 + options.services.rustic = { 64 + enable = lib.mkEnableOption "rustic"; 65 + 66 + package = lib.mkOption { 67 + type = lib.types.package; 68 + default = pkgs.rustic-rs; 69 + description = "Rustic derivation to use"; 70 + }; 71 + 72 + globs = lib.mkOption { 73 + type = lib.types.listOf lib.types.str; 74 + default = []; 75 + description = "Patterns to apply to backup. Use `%h` instead of `~`"; 76 + }; 77 + 78 + oneFileSystem = lib.mkOption { 79 + type = lib.types.bool; 80 + default = false; 81 + description = "If true, exclude other file systems, don't cross filesystem boundaries and subvolumes"; 82 + }; 83 + 84 + repo = lib.mkOption { 85 + type = lib.types.str; 86 + description = "Location of the repository"; 87 + }; 88 + 89 + passwordFile = lib.mkOption { 90 + type = lib.types.path; 91 + default = "${config.xdg.configHome}/rustic/password"; 92 + description = "Location of the password file"; 93 + }; 94 + 95 + profile = lib.mkOption { 96 + type = lib.types.attrsOf profileModule; 97 + description = "Specifies the backup profile to use and its settings"; 98 + }; 99 + }; 100 + 101 + config = lib.mkIf cfg.enable { 102 + home.packages = [cfg.package]; 103 + 104 + systemd.user.services.rustic-backup = { 105 + Unit = { 106 + Description = "Rustic Backup Tool"; 107 + StartLimitIntervalSec = "25m"; 108 + StartLimitBurst = "4"; 109 + }; 110 + 111 + Service = { 112 + LoadCredential = [ 113 + "pass:${cfg.passwordFile}" 114 + ]; 115 + Environment = [ 116 + "RUSTIC_PASSWORD_FILE=%d/pass" 117 + "RUSTIC_REPOSITORY=${cfg.repo}" 118 + ]; 119 + Type = "oneshot"; 120 + ExecStart = command; 121 + Restart = "on-failure"; 122 + RestartSec = "2m"; 123 + }; 124 + }; 125 + 126 + systemd.user.timers.rustic-backup = { 127 + Unit.Description = "Rustic periodic backup"; 128 + Install.WantedBy = ["timers.target"]; 129 + Timer = { 130 + Unit = "rustic-backup.service"; 131 + OnCalendar = "hourly"; # TODO: Make configurable! 132 + }; 133 + }; 134 + }; 135 + }
+5 -1
lefthook.yml
··· 3 3 commands: 4 4 formatting: 5 5 glob: "*.nix" 6 - run: nix shell --inputs-from . alejandra -c alejandra --check {all_files} < /dev/null 6 + run: nix fmt -- --check {staged_files} 7 + 8 + linting: 9 + glob: "*.nix" 10 + run: nix run --inputs-from . nixpkgs#statix -- check 7 11 8 12 statix: 9 13 parallel: false
-6
lib/default.nix
··· 1 - inputs: { 2 - mkSystem = import ./mk_system.nix inputs; 3 - mkHome = import ./mk_home.nix inputs; 4 - nixosConfigurationsAsPackages = import ./nixos_configurations_as_packages.nix inputs; 5 - homeConfigurationsAsPackages = import ./home_configurations_as_packages.nix inputs; 6 - }
-14
lib/home_configurations_as_packages.nix
··· 1 - {self, ...} @ inputs: let 2 - pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; 3 - 4 - inherit (pkgs.lib) genAttrs mapAttrs'; 5 - 6 - hostNames = __attrNames self.homeConfigurations; 7 - attrHostNames = genAttrs hostNames (name: "home/config/${name}"); 8 - configs = 9 - mapAttrs' (name: pname: { 10 - name = pname; 11 - value = self.homeConfigurations.${name}.activationPackage; 12 - }) 13 - attrHostNames; 14 - in {x86_64-linux = configs;}
-22
lib/mk_home.nix
··· 1 - { 2 - home-manager, 3 - self, 4 - ... 5 - } @ inputs: username: hostname: system: nixpkgs: let 6 - args = inputs; 7 - entrypoint = import "${self}/home/configurations/${username}@${hostname}.nix" inputs; 8 - in 9 - home-manager.lib.homeManagerConfiguration { 10 - inherit username system; 11 - homeDirectory = "/home/${username}"; 12 - 13 - pkgs = nixpkgs.legacyPackages.${system}; 14 - 15 - configuration = {lib, ...}: { 16 - imports = 17 - [ 18 - entrypoint 19 - ] 20 - ++ __attrValues self.homeModules; 21 - }; 22 - }
-31
lib/mk_system.nix
··· 1 - {self, ...} @ inputs: name: nixpkgs: 2 - nixpkgs.lib.nixosSystem ( 3 - let 4 - configFolder = "${self}/nixos/configurations"; 5 - entryPoint = import "${configFolder}/${name}.nix" inputs; 6 - bootloader = "${configFolder}/bootloader/${name}.nix"; 7 - hardware = "${configFolder}/hardware/${name}.nix"; 8 - in { 9 - system = "x86_64-linux"; 10 - 11 - modules = 12 - [ 13 - { 14 - boot.cleanTmpDir = true; 15 - networking.hostName = name; 16 - nix.flakes.enable = true; 17 - system.configurationRevision = self.rev or "dirty"; 18 - documentation.man = { 19 - enable = true; 20 - generateCaches = true; 21 - }; 22 - services.nixos-vscode-server.enable = true; 23 - } 24 - entryPoint 25 - bootloader 26 - hardware 27 - inputs.nixos-vscode-server.nixosModules.system 28 - ] 29 - ++ __attrValues self.nixosModules; 30 - } 31 - )
-14
lib/nixos_configurations_as_packages.nix
··· 1 - {self, ...} @ inputs: let 2 - pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; 3 - 4 - inherit (pkgs.lib) genAttrs mapAttrs'; 5 - 6 - hostNames = __attrNames self.nixosConfigurations; 7 - attrHostNames = genAttrs hostNames (name: "nixos/config/${name}"); 8 - configs = 9 - mapAttrs' (name: pname: { 10 - name = pname; 11 - value = self.nixosConfigurations.${name}.config.system.build.toplevel; 12 - }) 13 - attrHostNames; 14 - in {x86_64-linux = configs;}
+3
mixed/default.nix
··· 1 + inputs: { 2 + ipAddresses = import ./ip_addresses.nix inputs; 3 + }
+12
mixed/ip_addresses.nix
··· 1 + _: _: { 2 + lib.nobbz = { 3 + enceladeus.v4 = "172.24.199.101"; 4 + enceladeus.v6 = "fcc5:ee64:a023:8429:3ae6:0000:0000:0001"; 5 + 6 + rhea.v4 = "72.24.2.1"; 7 + rhea.v6 = "fcc5:ee64:a0b7:9bb6:2ed8:0000:0000:0001"; 8 + 9 + mimas.v4 = "172.24.152.168"; 10 + mimas.v6 = "fcc5:ee64:a0cd:9c36:c3ff:0000:0000:0001"; 11 + }; 12 + }
-1
nixos/configurations/bootloader/enceladeus.nix
··· 1 1 { 2 2 # Use the GRUB 2 boot loader. 3 3 boot.loader.grub.enable = true; 4 - boot.loader.grub.version = 2; 5 4 boot.loader.grub.useOSProber = false; 6 5 7 6 # boot.loader.grub.efiSupport = true;
+5
nixos/configurations/bootloader/hyperion.nix
··· 1 + { 2 + boot.loader.systemd-boot.enable = true; 3 + boot.loader.efi.canTouchEfiVariables = true; 4 + boot.loader.efi.efiSysMountPoint = "/boot/efi"; 5 + }
+3
nixos/configurations/bootloader/janus.nix
··· 1 + _: {} 2 + # TODO: Move BL relevant config here! 3 +
-2
nixos/configurations/bootloader/thetys.nix
··· 1 - # Thetys' bootloader configuration is done by upstream VBox OVA module 2 - {}
+2 -4
nixos/configurations/default.nix
··· 1 - {self, ...} @ inputs: { 2 - mimas = self.lib.mkSystem "mimas" inputs.unstable; # nixpkgs-2105; 3 - enceladeus = self.lib.mkSystem "enceladeus" inputs.unstable; 4 - thetys = self.lib.mkSystem "thetys" inputs.unstable; 1 + _: { 2 + nobbz.nixosConfigurations.mimas.system = "x86_64-linux"; 5 3 }
-164
nixos/configurations/enceladeus.nix
··· 1 - # Edit this configuration file to define what should be installed on 2 - # your system. Help is available in the configuration.nix(5) man page 3 - # and in the NixOS manual (accessible by running โ€˜nixos-helpโ€™). 4 - _: { 5 - config, 6 - pkgs, 7 - lib, 8 - ... 9 - }: { 10 - nix.allowedUnfree = ["b43-firmware" "zerotierone"]; 11 - nixpkgs.config.contentAddressedByDefault = false; 12 - 13 - # nix.useSandbox = false; 14 - nix.package = pkgs.nix_2_4; 15 - 16 - boot.blacklistedKernelModules = ["rtl8xxxu"]; 17 - boot.extraModulePackages = with config.boot.kernelPackages; [ 18 - rtl8192eu 19 - ]; 20 - 21 - # boot.kernelPackages = pkgs.linuxPackages_4_19; 22 - boot.kernel.sysctl = { 23 - "vm.swappiness" = 75; 24 - }; 25 - 26 - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 27 - 28 - # The global useDHCP flag is deprecated, therefore explicitly set to false here. 29 - # Per-interface useDHCP will be mandatory in the future, so this generated config 30 - # replicates the default behaviour. 31 - networking.networkmanager.enable = true; 32 - networking.networkmanager.unmanaged = [ 33 - "mac:0c:60:76:3f:c1:31" 34 - ]; 35 - networking.enableB43Firmware = true; 36 - 37 - networking.useDHCP = false; 38 - networking.interfaces.enp0s25.useDHCP = false; 39 - networking.interfaces.wlan0.useDHCP = false; 40 - networking.hostId = "62a007d6"; # required by ZFS 41 - 42 - # hardware.opengl.driSupport32Bit = true; 43 - # hardware.pulseaudio.support32Bit = true; 44 - 45 - # Configure network proxy if necessary 46 - # networking.proxy.default = "http://user:password@proxy:port/"; 47 - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 48 - 49 - # Select internationalisation properties. 50 - i18n.defaultLocale = "en_US.UTF-8"; 51 - console = { 52 - font = "Lat2-Terminus16"; 53 - keyMap = "de"; 54 - }; 55 - 56 - # Set your time zone. 57 - time.timeZone = "Europe/Berlin"; 58 - 59 - # List packages installed in system profile. To search, run: 60 - # $ nix search wget 61 - environment.systemPackages = with pkgs; [ 62 - wget 63 - rsync 64 - git 65 - firefox 66 - unison 67 - ]; 68 - 69 - # Some programs need SUID wrappers, can be configured further or are 70 - # started in user sessions. 71 - # programs.mtr.enable = true; 72 - # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; 73 - programs.zsh.enable = true; 74 - 75 - # List services that you want to enable: 76 - 77 - # Enable the OpenSSH daemon. 78 - services.openssh.enable = true; 79 - 80 - # Open ports in the firewall. 81 - networking.firewall.allowedTCPPorts = [9002]; 82 - # networking.firewall.allowedUDPPorts = [ ... ]; 83 - # Or disable the firewall altogether. 84 - # networking.firewall.enable = false; 85 - networking.firewall.trustedInterfaces = [ 86 - "ztrta4jrxj" 87 - ]; 88 - 89 - # Enable CUPS to print documents. 90 - # services.printing.enable = true; 91 - 92 - # Enable sound. 93 - sound.enable = true; 94 - hardware.pulseaudio.enable = true; 95 - 96 - # Enable the X11 windowing system. 97 - services.xserver.enable = true; 98 - services.xserver.layout = "de"; 99 - # services.xserver.xkbOptions = "eurosign:e"; 100 - 101 - # Enable touchpad support. 102 - # services.xserver.libinput.enable = true; 103 - 104 - # Enable the KDE Desktop Environment. 105 - services.xserver.displayManager.lightdm.enable = true; 106 - services.xserver.desktopManager.plasma5.enable = false; 107 - services.xserver.windowManager.awesome.enable = true; 108 - 109 - # services.kbfs.enable = true; 110 - # services.keybase.enable = true; 111 - 112 - virtualisation = { 113 - docker = { 114 - enable = false; 115 - }; 116 - 117 - # virtualbox.host.enable = true; 118 - }; 119 - 120 - # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 121 - users.users = { 122 - nmelzer = { 123 - isNormalUser = true; 124 - shell = pkgs.zsh; 125 - extraGroups = ["wheel" "networkmanager" "adbusers"]; # Enable โ€˜sudoโ€™ for the user. 126 - }; 127 - aroemer = { 128 - isNormalUser = true; 129 - }; 130 - proemer = { 131 - isNormalUser = true; 132 - }; 133 - }; 134 - 135 - services.prometheus = { 136 - exporters = { 137 - node = { 138 - enable = true; 139 - enabledCollectors = ["systemd"]; 140 - port = 9002; 141 - }; 142 - }; 143 - }; 144 - 145 - # This value determines the NixOS release with which your system is to be 146 - # compatible, in order to avoid breaking some software such as database 147 - # servers. You should change this only after NixOS release notes say you 148 - # should. 149 - system.stateVersion = "19.09"; # Did you read the comment? 150 - 151 - hardware.keyboard.zsa.enable = true; 152 - 153 - security.sudo.extraRules = [ 154 - { 155 - commands = [ 156 - { 157 - command = "/run/current-system/sw/bin/nixos-rebuild"; 158 - options = ["NOPASSWD"]; 159 - } 160 - ]; 161 - groups = ["wheel"]; 162 - } 163 - ]; 164 - }
+8 -10
nixos/configurations/hardware/enceladeus.nix
··· 1 1 # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 2 # and may be overwritten by future invocations. Please make changes 3 3 # to /etc/nixos/configuration.nix instead. 4 - { 5 - config, 6 - lib, 7 - pkgs, 8 - ... 9 - }: { 10 - imports = []; 11 - 4 + {lib, ...}: { 12 5 boot.initrd.availableKernelModules = ["uhci_hcd" "ehci_pci" "ahci" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "sdhci_pci"]; 13 - boot.initrd.kernelModules = []; 6 + boot.initrd.kernelModules = ["dm-snapshot"]; 14 7 boot.kernelModules = ["kvm-intel" "wl"]; 15 8 boot.extraModulePackages = []; 16 9 boot.supportedFilesystems = ["ntfs-3g"]; ··· 20 13 fsType = "ext4"; 21 14 }; 22 15 16 + # fileSystems."/nix/store" = { 17 + # device = "/dev/disk/by-uuid/1ee9d669-07e1-4f40-93af-71f9ad999f70"; 18 + # fsType = "ext4"; 19 + # }; 20 + 23 21 fileSystems."/nix/store" = { 24 - device = "/dev/disk/by-uuid/1ee9d669-07e1-4f40-93af-71f9ad999f70"; 22 + device = "/dev/mapper/pool-store--old"; 25 23 fsType = "ext4"; 26 24 }; 27 25
+40
nixos/configurations/hardware/hyperion.nix
··· 1 + # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 + { 5 + lib, 6 + modulesPath, 7 + ... 8 + }: { 9 + imports = [ 10 + (modulesPath + "/profiles/qemu-guest.nix") 11 + ]; 12 + 13 + boot.initrd.availableKernelModules = ["xhci_pci" "virtio_pci" "usbhid" "usb_storage" "sr_mod"]; 14 + boot.initrd.kernelModules = []; 15 + boot.kernelModules = []; 16 + boot.extraModulePackages = []; 17 + 18 + fileSystems."/" = { 19 + device = "/dev/disk/by-uuid/1c2c9f5f-041a-400d-9bfb-7b25639dff4f"; 20 + fsType = "ext4"; 21 + }; 22 + 23 + fileSystems."/boot/efi" = { 24 + device = "/dev/disk/by-uuid/0A83-6143"; 25 + fsType = "vfat"; 26 + }; 27 + 28 + swapDevices = [ 29 + {device = "/dev/disk/by-uuid/d0a59a01-aa79-4ec6-aec0-b299be6c1157";} 30 + ]; 31 + 32 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 33 + # (the default) this is the recommended approach. When using systemd-networkd it's 34 + # still possible to use this option, but it's recommended to use it in conjunction 35 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 36 + networking.useDHCP = lib.mkDefault true; 37 + # networking.interfaces.enp0s6.useDHCP = lib.mkDefault true; 38 + 39 + nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; 40 + }
+55
nixos/configurations/hardware/janus.nix
··· 1 + # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 + { 5 + config, 6 + lib, 7 + pkgs, 8 + modulesPath, 9 + ... 10 + }: { 11 + imports = [ 12 + (modulesPath + "/installer/scan/not-detected.nix") 13 + ]; 14 + 15 + boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci"]; 16 + boot.initrd.kernelModules = ["dm-snapshot"]; 17 + boot.initrd.luks.devices.cryptroot.device = "/dev/disk/by-partlabel/nixoscrypt"; 18 + boot.kernelModules = ["kvm-intel"]; 19 + boot.extraModulePackages = []; 20 + 21 + fileSystems."/" = { 22 + device = "/dev/mainpool/vdo-root"; 23 + fsType = "xfs"; 24 + }; 25 + 26 + fileSystems."/boot" = { 27 + device = "/dev/nvme0n1p1"; 28 + fsType = "vfat"; 29 + }; 30 + 31 + fileSystems."/nix" = { 32 + device = "/dev/mainpool/vdo-nix"; 33 + fsType = "xfs"; 34 + }; 35 + 36 + fileSystems."/home" = { 37 + device = "/dev/mainpool/vdo-home"; 38 + fsType = "xfs"; 39 + }; 40 + 41 + swapDevices = []; 42 + 43 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 44 + # (the default) this is the recommended approach. When using systemd-networkd it's 45 + # still possible to use this option, but it's recommended to use it in conjunction 46 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 47 + networking.useDHCP = lib.mkDefault true; 48 + # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; 49 + # networking.interfaces.enp56s0u1u1.useDHCP = lib.mkDefault true; 50 + # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; 51 + 52 + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 53 + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 54 + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 55 + }
+37 -15
nixos/configurations/hardware/mimas.nix
··· 2 2 # and may be overwritten by future invocations. Please make changes 3 3 # to /etc/nixos/configuration.nix instead. 4 4 { 5 - config, 6 5 lib, 7 6 pkgs, 8 7 ... ··· 14 13 boot.kernelModules = ["kvm-intel"]; 15 14 boot.kernelParams = ["intel_pstate=active"]; 16 15 boot.extraModulePackages = []; 17 - boot.supportedFilesystems = ["ntfs" "exfat" "avfs"]; 16 + boot.supportedFilesystems = ["ntfs" "exfat" "avfs" "xfs"]; 18 17 19 18 hardware.cpu.intel.updateMicrocode = true; 20 19 hardware.enableRedistributableFirmware = true; ··· 35 34 }; 36 35 37 36 fileSystems."/var/lib/docker" = { 38 - device = "/dev/disk/by-uuid/5da6b8c1-2598-48f1-9541-49c50e95aac9"; 37 + device = "/dev/pool/docker"; 38 + fsType = "ext4"; 39 + options = ["nofail"]; 40 + }; 41 + 42 + fileSystems."/var/lib/gitea" = { 43 + device = "/dev/pool/gitea"; 39 44 fsType = "ext4"; 45 + options = ["nofail"]; 40 46 }; 41 47 42 48 fileSystems."/var/lib/grafana" = { 43 - device = "/dev/disk/by-uuid/c6294dc0-f2cb-432b-a993-02d21855732c"; 49 + device = "/dev/pool/grafana"; 44 50 fsType = "ext4"; 51 + options = ["nofail"]; 45 52 }; 46 53 47 54 fileSystems."/var/lib/prometheus2" = { 48 - device = "/dev/disk/by-uuid/3ec5c5b2-d7cd-4b59-bb6b-d1fc40100662"; 55 + device = "/dev/pool/prometheus"; 49 56 fsType = "ext4"; 57 + options = ["nofail"]; 50 58 }; 51 59 52 60 fileSystems."/var/lib/paperless" = { 53 - device = "/dev/disk/by-label/paperless"; 61 + device = "/dev/pool/paperless"; 54 62 fsType = "ext4"; 63 + options = ["nofail"]; 55 64 }; 56 65 57 - # fileSystems."/var/lib/restic" = { 58 - # device = "/dev/disk/by-uuid/3eb6492a-b126-4ad5-b9df-4eb47df1135c"; 59 - # fsType = "ext4"; 60 - # }; 66 + fileSystems."/var/lib/restic" = { 67 + device = "/dev/usbpool/restic"; 68 + fsType = "ext4"; 69 + options = ["nofail"]; 70 + }; 61 71 62 - # fileSystems."/var/lib/ums" = { 63 - # device = "/dev/disk/by-label/ums"; 64 - # fsType = "ext4"; 65 - # }; 72 + fileSystems."/var/lib/ums" = { 73 + device = "/dev/usbpool/ums"; 74 + fsType = "ext4"; 75 + options = ["nofail"]; 76 + }; 77 + 78 + fileSystems."/var/lib/actual" = { 79 + device = "/dev/pool/actual"; 80 + fsType = "xfs"; 81 + options = ["nofail"]; 82 + }; 66 83 67 84 fileSystems."/boot" = { 68 85 device = "/dev/disk/by-uuid/7000-3A85"; 69 86 fsType = "vfat"; 70 87 }; 71 88 89 + fileSystems."/tmp" = { 90 + device = "/dev/pool/lvm-tmp"; 91 + fsType = "ext4"; 92 + }; 93 + 72 94 swapDevices = []; 73 95 74 96 nix.settings.max-jobs = lib.mkDefault 4; 75 97 powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 76 98 77 - hardware.opengl.extraPackages = with pkgs; [ 99 + hardware.graphics.extraPackages = with pkgs; [ 78 100 vaapiIntel 79 101 vaapiVdpau 80 102 libvdpau-va-gl
-35
nixos/configurations/hardware/thetys.nix
··· 1 - # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - config, 6 - lib, 7 - pkgs, 8 - ... 9 - }: { 10 - imports = []; 11 - 12 - boot.initrd.availableKernelModules = ["ohci_pci" "ahci" "sd_mod"]; 13 - boot.initrd.kernelModules = []; 14 - boot.kernelModules = []; 15 - boot.extraModulePackages = []; 16 - boot.initrd.supportedFilesystems = ["zfs"]; # boot from zfs 17 - boot.supportedFilesystems = ["zfs"]; 18 - 19 - fileSystems."/" = 20 - lib.mkForce 21 - { 22 - device = "/dev/disk/by-uuid/c1e4f201-3c0a-4d88-bd7c-fcd908412df2"; 23 - fsType = "ext4"; 24 - }; 25 - 26 - fileSystems."/home/demo/timmelzer@gmail.com" = { 27 - device = "GDRIVE"; 28 - fsType = "vboxsf"; 29 - }; 30 - 31 - swapDevices = []; 32 - 33 - nix.settings.max-jobs = lib.mkDefault 2; 34 - virtualisation.virtualbox.guest.enable = true; 35 - }
+71
nixos/configurations/mimas/gitea.nix
··· 1 + { 2 + pkgs, 3 + lib, 4 + config, 5 + ... 6 + }: let 7 + writeNuBin = pkgs.writers.writeNuBin.override {makeBinaryWrapper = pkgs.makeShellWrapper;}; 8 + 9 + find = lib.getExe pkgs.findutils; 10 + git = lib.getExe pkgs.git; 11 + systemd-notify = lib.getExe' pkgs.systemd "systemd-notify"; 12 + 13 + gitea-gc-script = 14 + writeNuBin "gitea-gc" 15 + # nu 16 + '' 17 + use std log 18 + 19 + def main [ 20 + repositories_base_folder: string, 21 + ] { 22 + log info $"Performing garbage collection for all repos in ($repositories_base_folder)" 23 + 24 + let repo_paths = run-external ${find} $repositories_base_folder "-maxdepth" 2 "-name" '*.git' | lines 25 + let repo_count = $repo_paths | length 26 + 27 + run-external ${systemd-notify} "--ready" 28 + 29 + $repo_paths | enumerate | each {|itm| 30 + let repo = $itm.item 31 + let idx = $itm.index 32 + 33 + let short_name = $repo | str substring --grapheme-clusters ($repositories_base_folder + "/" | str length)..-1 34 + 35 + log info $"Starting garbage collection for ($short_name)" 36 + run-external ${systemd-notify} $"--status=($idx + 1)/($repo_count): ($short_name)" 37 + run-external ${git} "-C" $repo gc "--aggressive" "--no-quiet" 38 + log info $"Finished garbage collection for ($short_name)" 39 + } 40 + 41 + run-external ${systemd-notify} "--stopping" 42 + 43 + log info "Overall garbage collection suceeded" 44 + } 45 + ''; 46 + in { 47 + systemd = { 48 + services.gitea-gc = { 49 + description = "Garbage Collect gitea repositories"; 50 + restartIfChanged = false; 51 + environment = { 52 + NU_LOG_LEVEL = "DEBUG"; 53 + }; 54 + serviceConfig = { 55 + CPUAccounting = true; 56 + CPUQuota = "200%"; 57 + CPUWeight = "idle"; 58 + ExecStart = "${lib.getExe gitea-gc-script} /var/lib/gitea/repositories"; 59 + NotifyAccess = "all"; 60 + Type = "notify"; 61 + User = config.services.gitea.user; 62 + }; 63 + }; 64 + 65 + timers.gitea-gc = { 66 + description = "Garbage Collection for gitea repositories - timer"; 67 + wantedBy = ["timers.target"]; 68 + timerConfig.OnCalendar = "Mon 01:00:00"; 69 + }; 70 + }; 71 + }
+26
nixos/configurations/mimas/paperless.nix
··· 1 + _: {config, ...}: { 2 + services.paperless = { 3 + enable = true; 4 + address = "0.0.0.0"; 5 + port = 58080; 6 + settings.PAPERLESS_OCR_LANGUAGE = "deu+eng"; 7 + }; 8 + 9 + systemd.services.paperless-consumer.after = ["var-lib-paperless.mount"]; 10 + systemd.services.paperless-scheduler.after = ["var-lib-paperless.mount"]; 11 + systemd.services.paperless-task-queue.after = ["var-lib-paperless.mount"]; 12 + systemd.services.paperless-web.after = ["var-lib-paperless.mount"]; 13 + 14 + services.traefik.dynamicConfigOptions.http.routers.paperless = { 15 + entryPoints = ["https" "http"]; 16 + rule = "Host(`paperless.mimas.internal.nobbz.dev`)"; 17 + service = "paperless"; 18 + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 19 + tls.certResolver = "mimasWildcard"; 20 + }; 21 + 22 + services.traefik.dynamicConfigOptions.http.services.paperless.loadBalancer = { 23 + passHostHeader = true; 24 + servers = [{url = "http://localhost:${toString config.services.paperless.port}";}]; 25 + }; 26 + }
+130
nixos/configurations/mimas/restic.nix
··· 1 + {self, ...}: { 2 + config, 3 + pkgs, 4 + lib, 5 + ... 6 + }: let 7 + resticPort = 9999; 8 + 9 + inherit (pkgs) proot mount umount restic; 10 + 11 + pools = { 12 + gitea = "/var/lib/gitea"; 13 + grafana = "/var/lib/grafana"; 14 + paperless = "/var/lib/paperless"; 15 + prometheus = "/var/lib/prometheus2"; 16 + }; 17 + 18 + extraPathes = [ 19 + "/var/lib/nixos" 20 + "/var/lib/redis-paperless" 21 + ]; 22 + 23 + basePath = "/tmp/backup"; 24 + mounts = lib.flatten ( 25 + (lib.mapAttrsToList (lv: path: ["-b" "${basePath}/${lv}:${path}"]) pools) 26 + ++ (builtins.map (path: ["-b" "${path}:${path}"]) extraPathes) 27 + ); 28 + 29 + snaps = lib.mapAttrs' (lv: _: lib.nameValuePair "${lv}_snap" "pool/${lv}") pools; 30 + lvcreates = lib.concatStringsSep "\n" (lib.mapAttrsToList (name: origin: "lvcreate -s --name ${name} ${origin}") snaps); 31 + lvactivates = lib.concatStringsSep "\n" (lib.mapAttrsToList (name: _: "lvchange -ay -Ky pool/${name}") snaps); 32 + mkdirs = lib.concatStringsSep "\n" (lib.mapAttrsToList (lv: _: "mkdir -p ${basePath}/${lv}") pools); 33 + mountCmds = lib.concatStringsSep "\n" (lib.mapAttrsToList (lv: _: "mount -o ro /dev/pool/${lv}_snap ${basePath}/${lv}") pools); 34 + 35 + unmountCmds = lib.concatStringsSep "\n" (lib.mapAttrsToList (lv: _: "umount ${basePath}/${lv}") pools); 36 + uncheckedUnmountCmds = lib.concatStringsSep "\n" (lib.mapAttrsToList (lv: _: "umount ${basePath}/${lv} || true") pools); 37 + lvdeactivates = lib.concatStringsSep "\n" (lib.mapAttrsToList (name: _: "lvs | grep -E '${name}\\s+.*a' && lvchange -an pool/${name}") snaps); 38 + lvremoves = lib.concatStringsSep "\n" (lib.mapAttrsToList (name: _: "lvs | grep -E '${name}' && lvremove pool/${name}") snaps); 39 + 40 + rest_repo = "rest:https://restic.mimas.internal.nobbz.dev/mimas"; 41 + pass = config.sops.secrets.restic.path; 42 + 43 + preStart = '' 44 + set -x 45 + 46 + ${uncheckedUnmountCmds} 47 + 48 + ${lvdeactivates} 49 + ${lvremoves} 50 + 51 + ${lvcreates} 52 + ${lvactivates} 53 + 54 + ${mkdirs} 55 + 56 + ${mountCmds} 57 + 58 + /run/wrappers/bin/sudo -u vaultwarden ${pkgs.sqlite}/bin/sqlite3 /var/lib/bitwarden_rs/db.sqlite3 .dump > /var/lib/bitwarden_rs/dump.sql 59 + ''; 60 + 61 + script = '' 62 + set -x 63 + 64 + # TODO: Make the latter from snapshots as well! 65 + proot ${lib.escapeShellArgs mounts} \ 66 + -b /var/lib/bitwarden_rs:/var/lib/bitwarden_rs \ 67 + -b /nix:/nix \ 68 + -b ''${CREDENTIALS_DIRECTORY}:''${CREDENTIALS_DIRECTORY} \ 69 + -b /etc:/etc \ 70 + -b /tmp:/tmp \ 71 + -r /var/empty \ 72 + restic --tag services -vv backup /var/lib 73 + ''; 74 + 75 + postStart = '' 76 + set -x 77 + 78 + ${unmountCmds} 79 + 80 + ${lvdeactivates} 81 + ${lvremoves} 82 + 83 + rm -rfv ${basePath} 84 + ''; 85 + in { 86 + services.restic.server = { 87 + enable = true; 88 + prometheus = true; 89 + extraFlags = ["--no-auth"]; # This is fine, as we are only reachable through VPN 90 + listenAddress = "127.0.0.1:${toString resticPort}"; 91 + }; 92 + 93 + # We have an extra mount to put restic data on, we need to make sure it is properly 94 + # mounted before writing anything to it 95 + systemd.services.restic-rest-server.after = ["var-lib-restic.mount"]; 96 + 97 + # Add an appropriate router for traefik 98 + services.traefik.dynamicConfigOptions.http.routers.restic = { 99 + entryPoints = ["https" "http"]; 100 + rule = "Host(`restic.mimas.internal.nobbz.dev`)"; 101 + service = "restic"; 102 + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 103 + tls.certResolver = "mimasWildcard"; 104 + }; 105 + 106 + # And the service configuration 107 + services.traefik.dynamicConfigOptions.http.services.restic.loadBalancer = { 108 + passHostHeader = false; 109 + servers = [{url = "http://127.0.0.1:${toString resticPort}";}]; 110 + }; 111 + 112 + systemd.timers.restic-system-snapshot-backup = { 113 + wantedBy = ["timers.target"]; 114 + timerConfig.OnCalendar = "hourly"; 115 + }; 116 + 117 + systemd.services.restic-system-snapshot-backup = { 118 + inherit preStart script postStart; 119 + path = [proot restic mount umount config.services.lvm.package]; 120 + serviceConfig.LoadCredential = ["pass:${pass}"]; 121 + environment = { 122 + RESTIC_REPOSITORY = rest_repo; 123 + RESTIC_PASSWORD_FILE = "%d/pass"; 124 + RESTIC_COMPRESSION = "max"; 125 + }; 126 + serviceConfig = { 127 + Type = "oneshot"; 128 + }; 129 + }; 130 + }
+212
nixos/configurations/mimas/rustic-timers.nix
··· 1 + _: { 2 + config, 3 + pkgs, 4 + lib, 5 + ... 6 + }: let 7 + profile_name = template: lib.removeSuffix ".toml" config.sops.templates."${template}".path; 8 + 9 + environment = { 10 + RUSTIC_NO_PROGRESS = "true"; 11 + RUSTIC_CACHE_DIR = "%T/rustic"; 12 + }; 13 + 14 + mimas_template = 15 + # toml 16 + '' 17 + [repository] 18 + repository = "rest:https://restic.mimas.internal.nobbz.dev/mimas" 19 + password-file = "${config.sops.secrets.rustic.path}" 20 + 21 + [copy] 22 + targets = ["${profile_name "mimas_hetzner.toml"}"] 23 + ''; 24 + mimas_hetzner_template = 25 + # toml 26 + '' 27 + [repository] 28 + repository = "opendal:sftp" 29 + password-file = "${config.sops.secrets.rustic.path}" 30 + 31 + [repository.options] 32 + endpoint = "ssh://${config.sops.placeholder.rustic-user}.your-storagebox.de:23" 33 + user = "${config.sops.placeholder.rustic-user}" 34 + key = "/root/.ssh/id_ed25519" 35 + root = "/home/mimas" 36 + ''; 37 + 38 + nobbz_template = 39 + # toml 40 + '' 41 + [repository] 42 + repository = "rest:https://restic.mimas.internal.nobbz.dev/nobbz" 43 + password-file = "${config.sops.secrets.rustic.path}" 44 + 45 + [copy] 46 + targets = ["${profile_name "nobbz_hetzner.toml"}"] 47 + ''; 48 + 49 + nobbz_hetzner_template = 50 + # toml 51 + '' 52 + [repository] 53 + repository = "opendal:sftp" 54 + password-file = "${config.sops.secrets.rustic.path}" 55 + 56 + [repository.options] 57 + endpoint = "ssh://${config.sops.placeholder.rustic-user}.your-storagebox.de:23" 58 + user = "${config.sops.placeholder.rustic-user}" 59 + key = "/root/.ssh/id_ed25519" 60 + root = "/home/nobbz" 61 + ''; 62 + 63 + schedule = { 64 + rustic-mimas-clean = "*-*-* 01:00:00"; 65 + rustic-nobbz-clean = "*-*-* 01:30:00"; 66 + rustic-mimas-hetzner-clean = "*-*-* 02:00:00"; 67 + rustic-nobbz-hetzner-clean = "*-*-* 03:00:00"; 68 + }; 69 + 70 + mkTimer = name: calendar: { 71 + "${name}" = { 72 + wantedBy = ["timers.target"]; 73 + timerConfig.OnCalendar = calendar; 74 + }; 75 + }; 76 + 77 + notify = lib.getExe' pkgs.systemd "systemd-notify"; 78 + in { 79 + sops.secrets.rustic = {}; 80 + sops.secrets.rustic-user = {}; 81 + 82 + sops.templates."mimas.toml".content = mimas_template; 83 + sops.templates."mimas_hetzner.toml".content = mimas_hetzner_template; 84 + sops.templates."nobbz.toml".content = nobbz_template; 85 + sops.templates."nobbz_hetzner.toml".content = nobbz_hetzner_template; 86 + 87 + systemd.timers = lib.pipe schedule [ 88 + (lib.mapAttrsToList mkTimer) 89 + lib.mkMerge 90 + ]; 91 + 92 + systemd.services = { 93 + rustic-mimas-clean = { 94 + path = [pkgs.rustic pkgs.openssh]; 95 + inherit environment; 96 + serviceConfig = { 97 + NotifyAccess = "all"; 98 + Type = "notify"; 99 + }; 100 + script = '' 101 + ${notify} --ready 102 + ${notify} --status=forget 103 + rustic forget -P ${profile_name "mimas.toml"} \ 104 + --keep-last 4 \ 105 + --keep-within-hourly 1d \ 106 + --keep-within-daily 5d \ 107 + --keep-within-weekly 35d \ 108 + --keep-within-monthly 100d \ 109 + --keep-within-yearly 2y 110 + 111 + ${notify} --status=prune 112 + rustic prune -P ${profile_name "mimas.toml"} \ 113 + --max-unused=0B \ 114 + --keep-delete=12h \ 115 + --max-repack=50GiB 116 + 117 + ${notify} --status=copy 118 + rustic copy -P ${profile_name "mimas.toml"} 119 + 120 + ${notify} --stopping --status="" 121 + ''; 122 + }; 123 + 124 + rustic-nobbz-clean = { 125 + path = [pkgs.rustic pkgs.openssh]; 126 + inherit environment; 127 + serviceConfig = { 128 + NotifyAccess = "all"; 129 + Type = "notify"; 130 + }; 131 + script = '' 132 + ${notify} --ready 133 + ${notify} --status=forget 134 + rustic forget -P ${profile_name "nobbz.toml"} \ 135 + --filter-tags home \ 136 + --keep-last 4 \ 137 + --keep-within-hourly 1d \ 138 + --keep-within-daily 5d \ 139 + --keep-within-weekly 35d \ 140 + --keep-within-monthly 100d \ 141 + --keep-within-yearly 2y 142 + 143 + ${notify} --status=prune 144 + rustic prune -P ${profile_name "nobbz.toml"} \ 145 + --max-unused=0B \ 146 + --keep-delete=12h \ 147 + --max-repack=50GiB 148 + 149 + ${notify} --status=copy 150 + rustic copy -P ${profile_name "nobbz.toml"} 151 + 152 + ${notify} --stopping --status="" 153 + ''; 154 + }; 155 + 156 + rustic-nobbz-hetzner-clean = { 157 + path = [pkgs.rustic pkgs.openssh]; 158 + inherit environment; 159 + serviceConfig = { 160 + NotifyAccess = "all"; 161 + Type = "notify"; 162 + }; 163 + script = '' 164 + ${notify} --ready 165 + ${notify} --status=forget 166 + rustic forget -P ${profile_name "nobbz_hetzner.toml"} \ 167 + --keep-last 1 \ 168 + --keep-within-hourly 2h \ 169 + --keep-within-daily 10d \ 170 + --keep-within-weekly 65d \ 171 + --keep-within-monthly 190d \ 172 + --keep-within-yearly 5y 173 + 174 + ${notify} --status=prune 175 + rustic prune -P ${profile_name "nobbz_hetzner.toml"} \ 176 + --max-unused 0B \ 177 + --max-repack 20GiB \ 178 + --keep-delete 11h 179 + 180 + ${notify} --stopping --status="" 181 + ''; 182 + }; 183 + 184 + rustic-mimas-hetzner-clean = { 185 + path = [pkgs.rustic pkgs.openssh]; 186 + inherit environment; 187 + serviceConfig = { 188 + NotifyAccess = "all"; 189 + Type = "notify"; 190 + }; 191 + script = '' 192 + ${notify} --ready 193 + ${notify} --status=forget 194 + rustic forget -P ${profile_name "mimas_hetzner.toml"} \ 195 + --keep-last 1 \ 196 + --keep-within-hourly 2h \ 197 + --keep-within-daily 10d \ 198 + --keep-within-weekly 65d \ 199 + --keep-within-monthly 190d \ 200 + --keep-within-yearly 5y 201 + 202 + ${notify} --status=prune 203 + rustic prune -P ${profile_name "mimas_hetzner.toml"} \ 204 + --max-unused 0B \ 205 + --max-repack 20GiB \ 206 + --keep-delete 11h 207 + 208 + ${notify} --stopping --status="" 209 + ''; 210 + }; 211 + }; 212 + }
+34
nixos/configurations/mimas/vaultwarden.nix
··· 1 + _: {config, ...}: let 2 + host = "passwords.mimas.internal.nobbz.dev"; 3 + wardenPort = 10000; 4 + in { 5 + sops.secrets.warden = {}; 6 + 7 + services.vaultwarden = { 8 + enable = true; 9 + environmentFile = config.sops.secrets.warden.path; 10 + config = { 11 + DOMAIN = "https://${host}"; 12 + DATABASE_MAX_CONNS = "5"; 13 + 14 + # LOG_LEVEL = "debug"; 15 + 16 + ROCKET_ADDRESS = "127.0.0.1"; 17 + ROCKET_PORT = "${toString wardenPort}"; 18 + ROCKET_WORKERS = "5"; 19 + }; 20 + }; 21 + 22 + services.traefik.dynamicConfigOptions.http.routers.warden = { 23 + entryPoints = ["https" "http"]; 24 + rule = "Host(`${host}`)"; 25 + service = "vaultwarden"; 26 + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 27 + tls.certResolver = "mimasWildcard"; 28 + }; 29 + 30 + services.traefik.dynamicConfigOptions.http.services.vaultwarden.loadBalancer = { 31 + passHostHeader = false; 32 + servers = [{url = "http://127.0.0.1:${toString wardenPort}";}]; 33 + }; 34 + }
+104 -84
nixos/configurations/mimas.nix
··· 1 1 # Edit this configuration file to define what should be installed on 2 2 # your system. Help is available in the configuration.nix(5) man page 3 3 # and in the NixOS manual (accessible by running โ€˜nixos-helpโ€™). 4 - { 5 - unstable, 6 - pdfminer-fix, 7 - ... 8 - }: { 4 + {self, ...} @ inputs: { 9 5 config, 10 6 pkgs, 11 7 lib, 12 8 ... 13 9 }: let 14 - upkgs = unstable.legacyPackages.x86_64-linux; 15 - steamPackages = ["steam" "steam-original" "steam-runtime"]; 16 - printerPackages = ["hplip" "samsung-UnifiedLinuxDriver"]; 10 + steamPackages = ["steam" "steam-run" "steam-original" "steam-runtime" "steam-unwrapped"]; 17 11 in { 18 - nix.allowedUnfree = ["zerotierone"] ++ printerPackages ++ steamPackages; 12 + imports = [ 13 + (import ./mimas/paperless.nix inputs) 14 + (import ./mimas/restic.nix inputs) 15 + (import ./mimas/rustic-timers.nix inputs) 16 + (import ./mimas/vaultwarden.nix inputs) 17 + ./mimas/gitea.nix 18 + ]; 19 + 20 + services.tailscale.enable = true; 21 + 22 + sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"]; 23 + sops.defaultSopsFile = "${self}/secrets/mimas/default.yaml"; 24 + 25 + sops.secrets.restic = {}; 26 + sops.secrets.traefik = {}; 27 + 28 + nix.allowedUnfree = ["zerotierone"] ++ steamPackages; 29 + nix.settings.experimental-features = ["ca-derivations" "impure-derivations"]; 30 + nix.distributedBuilds = true; 31 + # nix.enabledMachines = ["enceladeus"]; 19 32 20 33 security.chromiumSuidSandbox.enable = true; 21 34 35 + zramSwap.enable = true; 36 + zramSwap.memoryPercent = 25; 37 + 22 38 services.lvm.boot.thin.enable = true; 39 + boot.enableContainers = false; 40 + 41 + boot.binfmt.emulatedSystems = ["i686-linux" "aarch64-linux"]; 42 + nix.settings.extra-platforms = config.boot.binfmt.emulatedSystems; 43 + nix.settings.system-features = ["nixos-test" "benchmark" "big-parallel" "kvm" "gccarch-core2" "gccarch-haswell"]; 23 44 24 45 # The global useDHCP flag is deprecated, therefore explicitly set to false here. 25 46 # Per-interface useDHCP will be mandatory in the future, so this generated config ··· 32 53 networking.networkmanager.unmanaged = [ 33 54 # "mac:80:fa:5b:09:15:6e" 34 55 ]; 35 - networking.extraHosts = '' 36 - # 127.0.0.1 versions.teamspeak.com files.teamspeak-services.com 37 - ''; 38 - # networking.firewall.extraCommands = '' 39 - # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -s 10.42.0.0/16 -d 127.0.0.1/32 -j ACCEPT 40 - # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 6445 -s 10.42.0.0/16 -d 127.0.0.1/32 -j ACCEPT 41 - # ''; 42 - 43 - # services.k3s.enable = true; 44 - # services.k3s.extraFlags = "--write-kubeconfig-mode 0644 --node-external-ip 192.168.178.54 --node-external-ip 172.24.152.168"; 45 - # systemd.services.k3s.after = [ "var-lib-rancher.mount" ]; 46 - 47 - # Configure network proxy if necessary 48 - # networking.proxy.default = "http://user:password@proxy:port/"; 49 - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 50 56 51 57 # Select internationalisation properties. 52 58 i18n = { ··· 84 90 services.flatpak.enable = true; 85 91 86 92 # Open ports in the firewall. 87 - networking.firewall.allowedTCPPorts = [80 443 1111 8080 9002 9003 2342 9999 3000 58080]; 93 + networking.firewall.allowedTCPPorts = [80 443 1111 5555 8080 9002 9003 58080 4001]; 88 94 # networking.firewall.allowedUDPPorts = [ ... ]; 89 95 # Or disable the firewall altogether. 90 96 networking.firewall.enable = true; ··· 93 99 94 100 # Enable CUPS to print documents. 95 101 services.printing.enable = true; 96 - services.printing.drivers = [pkgs.hplipWithPlugin pkgs.samsung-unified-linux-driver]; 102 + 103 + services.avahi.enable = true; 104 + services.avahi.nssmdns4 = true; 105 + services.avahi.openFirewall = true; 97 106 98 107 services.ratbagd.enable = true; 99 108 109 + programs.partition-manager.enable = true; 110 + # security.polkit.enable = true; 111 + 100 112 # services.hydra = { 101 113 # enable = true; 102 114 # package = pkgs.hydra-unstable; ··· 108 120 # }; 109 121 # networking.firewall.allowedTCPPorts = [ 3000 ]; 110 122 111 - # Enable sound. 112 - sound.enable = true; 113 - hardware.pulseaudio = { 114 - enable = true; 115 - package = pkgs.pulseaudioFull; 116 - }; 123 + # Enable pulse compat. 124 + services.pipewire.pulse.enable = true; 125 + 117 126 hardware.bluetooth.enable = true; 118 127 119 128 # Enable the X11 windowing system. 120 129 services.xserver.enable = true; 121 - services.xserver.layout = "de"; 122 - # services.xserver.xkbOptions = "eurosign:e"; 123 - 124 - services.restic.server.enable = true; 125 - services.restic.server.prometheus = true; 126 - services.restic.server.extraFlags = ["--no-auth"]; 127 - services.restic.server.listenAddress = "172.24.152.168:9999"; 128 - systemd.services.restic-rest-server.after = ["var-lib-restic.mount"]; 130 + services.xserver.xkb.layout = "de"; 129 131 130 132 # Enable touchpad support. 131 133 # services.xserver.libinput.enable = true; 132 134 133 135 # Enable the KDE Desktop Environment. 134 - services.xserver.displayManager.sddm.enable = true; 136 + services.displayManager.sddm.enable = true; 135 137 services.xserver.desktopManager.plasma5.enable = true; 136 138 services.xserver.windowManager.awesome.enable = true; 137 139 138 - services.dbus.packages = with pkgs; [pkgs.dconf]; 140 + services.dbus.packages = [pkgs.dconf]; 139 141 140 142 services.udev.extraRules = '' 141 143 KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666" ··· 146 148 147 149 programs = { 148 150 steam.enable = true; 151 + 149 152 zsh.enable = true; 150 153 zsh.enableCompletion = false; 151 154 }; 152 155 153 - hardware.opengl.driSupport32Bit = true; 154 - hardware.pulseaudio.support32Bit = true; 155 - 156 - hardware.opengl.enable = true; 157 - hardware.opengl.extraPackages = [pkgs.vaapiIntel pkgs.beignet]; 156 + hardware.graphics.enable = true; 157 + hardware.graphics.extraPackages = [pkgs.vaapiIntel]; 158 158 159 - services.gitea.enable = true; 159 + services.gitea = { 160 + enable = true; 161 + settings.server.DOMAIN = "gitea.mimas.internal.nobbz.dev"; 162 + settings.server.HTTP_ADDR = "127.0.0.1"; 163 + settings.server.ROOT_URL = lib.mkForce "https://gitea.mimas.internal.nobbz.dev/"; 164 + settings."git.timeout".DEFAULT = 3600; # 1 hour 165 + settings."git.timeout".MIGRATE = 3600; # 1 hour 166 + settings."git.timeout".MIRROR = 3600; # 1 hour 167 + settings."git.timeout".CLONE = 3600; # 1 hour 168 + settings."git.timeout".PULL = 3600; # 1 hour 169 + settings."git.timeout".GC = 3600; # 1 hour 170 + }; 171 + systemd.services.gitea.after = ["var-lib-gitea.mount"]; 160 172 161 173 virtualisation = { 162 174 docker = { 163 175 enable = true; 164 176 # storageDriver = "zfs"; 165 177 # extraOptions = "--storage-opt zfs.fsname=rpool/local/docker"; 166 - package = upkgs.docker; 178 + package = pkgs.docker; 167 179 extraOptions = "--dns 1.1.1.1"; 168 180 }; 169 181 170 182 containers.enable = true; 171 183 172 184 libvirtd.enable = true; 173 - virtualbox.host.enable = true; 174 185 }; 175 186 176 187 # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. ··· 190 201 "libvirtd" 191 202 "docker" 192 203 "transmission" 204 + "scanner" 205 + "lp" 193 206 ]; 194 207 }; 195 208 ··· 207 220 }; 208 221 }; 209 222 210 - security.sudo.extraRules = [ 211 - { 212 - commands = [ 213 - { 214 - command = "/run/current-system/sw/bin/nixos-rebuild"; 215 - options = ["NOPASSWD"]; 216 - } 217 - ]; 218 - groups = ["wheel"]; 219 - } 220 - ]; 223 + security.sudo.extraConfig = "Defaults passwd_timeout=0"; 221 224 222 225 # services.wakeonlan.interfaces = [ 223 226 # { ··· 229 232 # grafana configuration 230 233 services.grafana = { 231 234 enable = true; 232 - domain = "grafana.nobbz.lan"; 233 - port = 2342; 234 - addr = "0.0.0.0"; 235 + settings.server = { 236 + domain = "grafana.mimas.internal.nobbz.lan"; 237 + http_port = 2342; 238 + http_addr = "127.0.0.1"; 239 + }; 235 240 }; 236 241 237 242 # nginx reverse proxy 238 243 services.nginx.virtualHosts.${config.services.grafana.domain} = { 239 244 locations."/" = { 240 - proxyPass = "http://127.0.0.1:${toString config.services.grafana.port}"; 245 + proxyPass = "http://127.0.0.1:${toString config.services.grafana.settings.server.http_port}"; 241 246 proxyWebsockets = true; 242 247 }; 243 248 }; 244 249 245 250 hardware.keyboard.zsa.enable = true; 251 + hardware.sane.enable = true; 246 252 247 253 services.traefik.enable = true; 248 - systemd.services.traefik.serviceConfig.EnvironmentFile = "/etc/traefik/env"; 254 + systemd.services.traefik.serviceConfig.EnvironmentFile = [config.sops.secrets.traefik.path]; 249 255 services.traefik.staticConfigOptions = { 250 256 log.level = "DEBUG"; 251 257 ··· 297 303 tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 298 304 tls.certResolver = "mimasWildcard"; 299 305 }; 300 - paperless = { 306 + gitea = { 301 307 entryPoints = ["https" "http"]; 302 - rule = "Host(`paperless.mimas.internal.nobbz.dev`)"; 303 - service = "paperless"; 308 + rule = "Host(`gitea.mimas.internal.nobbz.dev`)"; 309 + service = "gitea"; 310 + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 311 + tls.certResolver = "mimasWildcard"; 312 + }; 313 + grafana = { 314 + entryPoints = ["https" "http"]; 315 + rule = "Host(`grafana.mimas.internal.nobbz.dev`)"; 316 + service = "grafana"; 304 317 tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; 305 318 tls.certResolver = "mimasWildcard"; 306 319 }; ··· 319 332 fritz.loadBalancer.passHostHeader = false; 320 333 fritz.loadBalancer.servers = [{url = "http://fritz.box";}]; 321 334 322 - paperless.loadBalancer.passHostHeader = true; 323 - paperless.loadBalancer.servers = [{url = "http://localhost:58080";}]; 335 + gitea.loadBalancer.passHostHeader = true; 336 + gitea.loadBalancer.servers = [{url = "http://localhost:${toString config.services.gitea.settings.server.HTTP_PORT}";}]; 337 + 338 + grafana.loadBalancer.passHostHeader = true; 339 + grafana.loadBalancer.servers = [{url = "http://localhost:${toString config.services.grafana.settings.server.http_port}";}]; 324 340 }; 325 341 }; 326 342 ··· 361 377 { 362 378 targets = [ 363 379 "127.0.0.1:${toString config.services.prometheus.exporters.node.port}" 364 - "172.24.199.101:9002" 365 - "172.24.231.199:9002" 380 + "${config.lib.nobbz.enceladeus.v4}:9002" 366 381 ]; 367 382 } 368 383 ]; ··· 370 385 ]; 371 386 }; 372 387 373 - services.paperless-ng = { 374 - # https://github.com/NixOS/nixpkgs/pull/165382 375 - package = pdfminer-fix.legacyPackages.${pkgs.system}.paperless-ng; 376 - enable = true; 377 - # address = "mimas.internal.nobbz.dev"; 378 - address = "0.0.0.0"; 379 - port = 58080; 380 - extraConfig.PAPERLESS_OCR_LANGUAGE = "deu+eng"; 381 - }; 382 - systemd.services.paperless-ng-server.after = ["var-lib-paperless.mount"]; 388 + nix.buildMachines = let 389 + communityBuilder = name: system: { 390 + hostName = "${name}.nix-community.org"; 391 + inherit system; 392 + sshKey = "/root/.ssh/id_ed25519"; 393 + sshUser = "NobbZ"; 394 + maxJobs = 8; 395 + protocol = "ssh"; 396 + speedFactor = 4; 397 + supportedFeatures = ["nixos-test" "benchmark" "big-parallel" "kvm"]; 398 + }; 399 + in [ 400 + (communityBuilder "build-box" "x86_64-linux") 401 + (communityBuilder "aarch64-build.box" "aarch64-linux") 402 + ]; 383 403 384 404 # This value determines the NixOS release with which your system is to be 385 405 # compatible, in order to avoid breaking some software such as database 386 406 # servers. You should change this only after NixOS release notes say you 387 407 # should. 388 - system.stateVersion = "19.09"; # Did you read the comment? 408 + system.stateVersion = "20.09"; # Did you read the comment? 389 409 }
-129
nixos/configurations/thetys.nix
··· 1 - { 2 - self, 3 - nixpkgs-2105, 4 - ... 5 - }: { 6 - self, 7 - config, 8 - pkgs, 9 - modulesPath, 10 - ... 11 - }: { 12 - # TODO: ๐Ÿ‘‡ move import of `virtualbox-demo.nix` into extra module ๐Ÿ‘‡ 13 - imports = [(modulesPath + "/installer/virtualbox-demo.nix")]; 14 - 15 - nix.allowedUnfree = ["zerotierone"]; 16 - 17 - boot.kernelPackages = pkgs.linuxPackages_5_16; 18 - 19 - networking.hostId = "deadbeef"; 20 - 21 - programs.gnupg = { 22 - agent = { 23 - enable = true; 24 - enableSSHSupport = true; 25 - pinentryFlavor = "tty"; 26 - }; 27 - }; 28 - 29 - users.users.demo = { 30 - isNormalUser = true; 31 - description = "Demo user account"; 32 - extraGroups = ["wheel" "docker"]; 33 - uid = 1000; 34 - shell = pkgs.zsh; 35 - }; 36 - 37 - boot.kernel.sysctl = { 38 - "vm.max_map_count" = 262144; 39 - }; 40 - 41 - programs.zsh.enable = true; 42 - programs.zsh.enableCompletion = false; 43 - 44 - virtualisation = { 45 - docker.enable = true; 46 - docker.extraOptions = "--insecure-registry registry.cap01.cloudseeds.de"; 47 - docker.liveRestore = false; 48 - podman.enable = true; 49 - }; 50 - 51 - console.font = "Lat2-Terminus16"; 52 - console.keyMap = "de"; 53 - 54 - environment.systemPackages = [pkgs.unison]; 55 - 56 - services.xserver.layout = pkgs.lib.mkForce "de"; 57 - 58 - services.xserver.videoDrivers = ["vmware" "virtualbox" "modesetting"]; 59 - systemd.services.virtualbox-resize = { 60 - description = "VirtualBox Guest Screen Resizing"; 61 - 62 - wantedBy = ["multi-user.target"]; 63 - requires = ["dev-vboxguest.device"]; 64 - after = ["dev-vboxguest.device"]; 65 - 66 - unitConfig.ConditionVirtualization = "oracle"; 67 - 68 - serviceConfig.ExecStart = "@${config.boot.kernelPackages.virtualboxGuestAdditions}/bin/VBoxClient -fv --vmsvga"; 69 - }; 70 - 71 - # services.zerotierone.package = nixpkgs-2105.legacyPackages.${pkgs.system}.zerotierone; 72 - 73 - # services.ipfs.enable = true; 74 - 75 - services.openssh.enable = true; 76 - 77 - swapDevices = [ 78 - { 79 - device = "/var/swap-2"; 80 - size = 2048 * 4; 81 - } 82 - ]; 83 - 84 - networking.hosts."127.0.0.1" = ["ax69_mysql"]; 85 - networking.firewall.allowedTCPPorts = [ 86 - # ports often used for development, that I want to expose for easier access from the host 87 - 3000 88 - 3306 89 - 8080 90 - 8081 91 - 9002 92 - ]; 93 - 94 - nix.distributedBuilds = false; 95 - nix.buildMachines = [ 96 - { 97 - hostName = "builder-zerotier"; 98 - system = "x86_64-linux"; 99 - maxJobs = 1; 100 - speedFactor = 1; 101 - supportedFeatures = ["nixos-test" "benchmark" "big-parallel" "kvm"]; 102 - mandatoryFeatures = []; 103 - } 104 - ]; 105 - 106 - security.sudo.extraRules = [ 107 - { 108 - commands = [ 109 - { 110 - command = "/run/current-system/sw/bin/nixos-rebuild"; 111 - options = ["NOPASSWD"]; 112 - } 113 - ]; 114 - groups = ["wheel"]; 115 - } 116 - ]; 117 - 118 - services.prometheus = { 119 - exporters = { 120 - node = { 121 - enable = true; 122 - enabledCollectors = ["systemd"]; 123 - port = 9002; 124 - }; 125 - }; 126 - }; 127 - 128 - system.stateVersion = "19.09"; 129 - }
+12 -9
nixos/modules/default.nix
··· 1 - inputs: { 2 - cachix = import ./cachix inputs; 3 - flake = import ./flake.nix inputs; 4 - hostnames = import ./hostnames.nix inputs; 5 - kernel = import ./kernel.nix inputs; 6 - moonlander = import ./moonlander.nix inputs; 7 - nix = import ./nix.nix inputs; 8 - switcher = import ./switcher.nix inputs; 9 - zerotier = import ./zerotier.nix inputs; 1 + { 2 + nobbz.nixosModules = { 3 + cachix = ./cachix; 4 + distributed = ./distributed.nix; 5 + flake = ./flake.nix; 6 + hostnames = ./hostnames.nix; 7 + kernel = ./kernel.nix; 8 + moonlander = ./moonlander.nix; 9 + nix = ./nix.nix; 10 + switcher = ./switcher.nix; 11 + zerotier = ./zerotier.nix; 12 + }; 10 13 }
+58
nixos/modules/distributed.nix
··· 1 + _: { 2 + config, 3 + lib, 4 + ... 5 + }: let 6 + machines = { 7 + # Please try to keep the definitions alphabetically sorted 8 + enceladeus = { 9 + systems = ["i686-linux" "x86_64-linux"]; 10 + supportedFeatures = []; 11 + sshUser = "root"; 12 + sshKey = "/home/nmelzer/.ssh/id_rsa"; # TODO: sopsify 13 + speedFactor = 1; 14 + protocol = "ssh-ng"; 15 + maxJobs = 2; 16 + hostName = "enceladeus"; 17 + }; 18 + 19 + mimas = { 20 + systems = ["i686-linux" "aarch64-linux" "x86_64-linux"]; 21 + supportedFeatures = ["kvm" "big-parallel"]; 22 + sshUser = "root"; 23 + sshKey = "/home/nmelzer/.ssh/id_rsa"; # TODO: sopsify 24 + speedFactor = 8; 25 + protocol = "ssh-ng"; 26 + maxJobs = 4; 27 + hostName = "mimas"; 28 + }; 29 + }; 30 + 31 + names = builtins.attrNames machines; 32 + 33 + inherit (lib.types) listOf enum; 34 + inherit (config.nix) enabledMachines distributedBuilds; 35 + inherit (config.networking) hostName; 36 + 37 + selfRemote = builtins.elem hostName enabledMachines; 38 + in { 39 + options.nix = { 40 + enabledMachines = lib.mkOption { 41 + type = listOf (enum names); 42 + default = []; 43 + description = '' 44 + A list of hosts to use for remote builds. 45 + ''; 46 + }; 47 + }; 48 + 49 + config = lib.mkIf distributedBuilds { 50 + assertions = [ 51 + { 52 + assertion = !selfRemote; 53 + message = "You are not allowed to use yourself as a distributed builder"; 54 + } 55 + ]; 56 + nix.buildMachines = builtins.map (name: builtins.getAttr name machines) enabledMachines; 57 + }; 58 + }
+9 -15
nixos/modules/flake.nix
··· 1 1 { 2 - unstable, 3 - nixpkgs-2105, 4 - nixpkgs-2111, 5 2 nix, 3 + nixpkgs, 4 + programsdb, 6 5 ... 7 6 }: { 8 7 config, ··· 12 11 }: let 13 12 base = "/etc/nixpkgs/channels"; 14 13 nixpkgsPath = "${base}/nixpkgs"; 15 - nixpkgs2105Path = "${base}/nixpkgs2105"; 16 - nixpkgs2111Path = "${base}/nixpkgs2111"; 17 14 in { 18 15 options.nix.flakes.enable = lib.mkEnableOption "nix flakes"; 19 16 20 17 config = lib.mkIf config.nix.flakes.enable { 18 + programs.command-not-found.dbPath = programsdb.packages.${pkgs.system}.programs-sqlite; 19 + 21 20 nix = { 22 - package = lib.mkDefault nix.packages.x86_64-linux.nix; # pkgs.nixUnstable; 23 - experimentalFeatures = "nix-command flakes"; 21 + package = lib.mkDefault nix.packages.${pkgs.system}.nix-cli; 24 22 25 - registry.nixpkgs.flake = unstable; 26 - registry.nixpkgs2105.flake = nixpkgs-2105; 27 - registry.nixpkgs2111.flake = nixpkgs-2111; 23 + settings.experimental-features = ["nix-command" "flakes"]; 24 + 25 + registry.nixpkgs.flake = nixpkgs; 28 26 29 27 nixPath = [ 30 28 "nixpkgs=${nixpkgsPath}" 31 - "nixpkgs2105=${nixpkgs2105Path}" 32 - "nixpkgs2111=${nixpkgs2111Path}" 33 29 "/nix/var/nix/profiles/per-user/root/channels" 34 30 ]; 35 31 }; 36 32 37 33 systemd.tmpfiles.rules = [ 38 - "L+ ${nixpkgsPath} - - - - ${unstable}" 39 - "L+ ${nixpkgs2105Path} - - - - ${nixpkgs-2105}" 40 - "L+ ${nixpkgs2111Path} - - - - ${nixpkgs-2111}" 34 + "L+ ${nixpkgsPath} - - - - ${nixpkgs}" 41 35 ]; 42 36 }; 43 37 }
+5 -1
nixos/modules/kernel.nix
··· 4 4 config, 5 5 ... 6 6 }: let 7 - zfsUsed = lib.lists.elem "zfs" (config.boot.supportedFilesystems ++ config.boot.initrd.supportedFilesystems); 7 + supportedFilesystems = 8 + if builtins.isList config.boot.supportedFilesystems 9 + then config.boot.supportedFilesystems ++ config.boot.initrd.supportedFilesystems 10 + else builtins.attrNames (lib.filterAttrs (_name: value: value) (config.boot.supportedFilesystems // config.boot.initrd.supportedFilesystems)); 11 + zfsUsed = lib.lists.elem "zfs" supportedFilesystems; 8 12 in { 9 13 boot.kernelPackages = lib.mkDefault ( 10 14 if zfsUsed
+9 -13
nixos/modules/nix.nix
··· 4 4 ... 5 5 }: let 6 6 allowed = config.nix.allowedUnfree; 7 + kibibyte = 1024; 8 + mibibyte = 1024 * kibibyte; 9 + gibibyte = 1024 * mibibyte; 7 10 in { 8 11 options.nix = { 9 - experimentalFeatures = lib.mkOption { 10 - type = lib.types.separatedString " "; 11 - default = ""; 12 - description = '' 13 - Enables experimental features 14 - ''; 15 - }; 16 - 17 12 allowedUnfree = lib.mkOption { 18 - type = lib.types.listOf lib.types.string; 13 + type = lib.types.listOf lib.types.str; 19 14 default = []; 20 15 description = '' 21 16 Allows for unfree packages by their name. ··· 24 19 }; 25 20 26 21 config = lib.mkMerge [ 27 - (lib.mkIf (config.nix.experimentalFeatures != "") {nix.extraOptions = "experimental-features = ${config.nix.experimentalFeatures}";}) 28 - (lib.mkIf (allowed != []) {nixpkgs.config.allowUnfreePredicate = pkg: __elem (lib.getName pkg) allowed;}) 22 + (lib.mkIf (allowed != []) {nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) allowed;}) 29 23 {nix.settings.auto-optimise-store = lib.mkDefault true;} 30 24 { 31 - nix.gc.automatic = lib.mkDefault true; 32 - nix.gc.options = lib.mkDefault "--delete-older-than 10d"; 25 + nix.settings.trusted-users = lib.mkDefault ["root" "@wheel"]; 26 + nix.settings.min-free = lib.mkDefault (5 * gibibyte); 27 + nix.settings.max-free = lib.mkDefault (25 * gibibyte); 28 + nix.settings.allow-import-from-derivation = lib.mkDefault false; 33 29 } 34 30 ]; 35 31 }
+13
nixos/modules/prefer-local.patch
··· 1 + diff --git a/src/build-remote/build-remote.cc b/src/build-remote/build-remote.cc 2 + index cfc4baaca..4fbaae4fa 100644 3 + --- a/src/build-remote/build-remote.cc 4 + +++ b/src/build-remote/build-remote.cc 5 + @@ -122,6 +122,8 @@ static int main_build_remote(int argc, char * * argv) 6 + /* It's possible to build this locally right now: */ 7 + bool canBuildLocally = amWilling && couldBuildLocally; 8 + 9 + + if (canBuildLocally) continue; 10 + + 11 + /* Error ignored here, will be caught later */ 12 + mkdir(currentLoad.c_str(), 0777); 13 +
+24 -1
nixos/modules/switcher.nix
··· 1 - {self, ...}: {pkgs, ...}: { 1 + {self, ...}: { 2 + pkgs, 3 + config, 4 + ... 5 + }: { 2 6 environment.systemPackages = [self.packages."${pkgs.system}".switcher]; 7 + 8 + security.sudo.extraRules = let 9 + storePrefix = "/nix/store/*"; 10 + commandPrefix = "/run/current-system/sw"; 11 + systemName = "nixos-system-${config.networking.hostName}-*"; 12 + nixEnvCmd = "${commandPrefix}/bin/nix-env"; 13 + systemdPath = "${commandPrefix}/bin/systemd-run"; 14 + systemdRunCmd = "${systemdPath} -E LOCALE_ARCHIVE -E NIXOS_INSTALL_BOOTLOADER --collect --no-ask-password --pty --quiet --same-dir --service-type=exec --unit=nixos-rebuild-switch-to-configuration"; 15 + systemdRunEqCmd = "${systemdPath} -E LOCALE_ARCHIVE -E NIXOS_INSTALL_BOOTLOADER= --collect --no-ask-password --pty --quiet --same-dir --service-type=exec --unit=nixos-rebuild-switch-to-configuration"; 16 + options = ["NOPASSWD"]; 17 + mkRule = command: { 18 + commands = [{inherit command options;}]; 19 + groups = ["wheel"]; 20 + }; 21 + in [ 22 + (mkRule "${nixEnvCmd} -p /nix/var/nix/profiles/system --set ${storePrefix}-${systemName}") 23 + (mkRule "${systemdRunCmd} --wait true") 24 + (mkRule "${systemdRunEqCmd} --wait ${storePrefix}-${systemName}/bin/switch-to-configuration switch") 25 + ]; 3 26 }
+14 -1
nixos/modules/zerotier.nix
··· 1 - _: { 1 + {nixpkgs-pre-rust, ...}: { 2 + config, 3 + pkgs, 4 + ... 5 + }: { 2 6 services.zerotierone.enable = true; 3 7 services.zerotierone.joinNetworks = ["8286ac0e4768c8ae"]; 8 + 9 + services.zerotierone.localConf = {}; 10 + 11 + services.zerotierone.package = 12 + (import nixpkgs-pre-rust { 13 + inherit (config.nixpkgs) config; 14 + inherit (pkgs) system; 15 + }) 16 + .zerotierone; 4 17 }
+67
npins/default.nix
··· 1 + # Generated by npins. Do not modify; will be overwritten regularly 2 + let 3 + data = builtins.fromJSON (builtins.readFile ./sources.json); 4 + version = data.version; 5 + 6 + mkSource = spec: 7 + assert spec ? type; let 8 + path = 9 + if spec.type == "Git" 10 + then mkGitSource spec 11 + else if spec.type == "GitRelease" 12 + then mkGitSource spec 13 + else if spec.type == "PyPi" 14 + then mkPyPiSource spec 15 + else if spec.type == "Channel" 16 + then mkChannelSource spec 17 + else builtins.throw "Unknown source type ${spec.type}"; 18 + in 19 + spec // {outPath = path;}; 20 + 21 + mkGitSource = { 22 + repository, 23 + revision, 24 + url ? null, 25 + hash, 26 + ... 27 + }: 28 + assert repository ? type; 29 + # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository 30 + # In the latter case, there we will always be an url to the tarball 31 + if url != null 32 + then 33 + (builtins.fetchTarball { 34 + inherit url; 35 + sha256 = hash; # FIXME: check nix version & use SRI hashes 36 + }) 37 + else 38 + assert repository.type == "Git"; 39 + builtins.fetchGit { 40 + url = repository.url; 41 + rev = revision; 42 + # hash = hash; 43 + }; 44 + 45 + mkPyPiSource = { 46 + url, 47 + hash, 48 + ... 49 + }: 50 + builtins.fetchurl { 51 + inherit url; 52 + sha256 = hash; 53 + }; 54 + 55 + mkChannelSource = { 56 + url, 57 + hash, 58 + ... 59 + }: 60 + builtins.fetchTarball { 61 + inherit url; 62 + sha256 = hash; 63 + }; 64 + in 65 + if version == 3 66 + then builtins.mapAttrs (_: mkSource) data.pins 67 + else throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`"
+53
npins/sources.json
··· 1 + { 2 + "pins": { 3 + "catppuccin-bat": { 4 + "type": "Git", 5 + "repository": { 6 + "type": "GitHub", 7 + "owner": "catppuccin", 8 + "repo": "bat" 9 + }, 10 + "branch": "main", 11 + "revision": "699f60fc8ec434574ca7451b444b880430319941", 12 + "url": "https://github.com/catppuccin/bat/archive/699f60fc8ec434574ca7451b444b880430319941.tar.gz", 13 + "hash": "1lirgwgh2hnz6j60py19bbmhvgaqs7i6wf6702k6n83lgw4aixg9" 14 + }, 15 + "catppuccin-rofi": { 16 + "type": "Git", 17 + "repository": { 18 + "type": "GitHub", 19 + "owner": "catppuccin", 20 + "repo": "rofi" 21 + }, 22 + "branch": "main", 23 + "revision": "c24a212a6b07c2d45f32d01d7f10b4d88ddc9f45", 24 + "url": "https://github.com/catppuccin/rofi/archive/c24a212a6b07c2d45f32d01d7f10b4d88ddc9f45.tar.gz", 25 + "hash": "0236bcwad4cmr1fhnywvcnzf7xdmhhwgrkrq8jdg8livhh1h8rjq" 26 + }, 27 + "fzf-tab": { 28 + "type": "Git", 29 + "repository": { 30 + "type": "GitHub", 31 + "owner": "Aloxaf", 32 + "repo": "fzf-tab" 33 + }, 34 + "branch": "master", 35 + "revision": "6aced3f35def61c5edf9d790e945e8bb4fe7b305", 36 + "url": "https://github.com/Aloxaf/fzf-tab/archive/6aced3f35def61c5edf9d790e945e8bb4fe7b305.tar.gz", 37 + "hash": "1brljd9744wg8p9v3q39kdys33jb03d27pd0apbg1cz0a2r1wqqi" 38 + }, 39 + "zsh-syntax-highlighting": { 40 + "type": "Git", 41 + "repository": { 42 + "type": "GitHub", 43 + "owner": "zsh-users", 44 + "repo": "zsh-syntax-highlighting" 45 + }, 46 + "branch": "master", 47 + "revision": "5eb677bb0fa9a3e60f0eff031dc13926e093df92", 48 + "url": "https://github.com/zsh-users/zsh-syntax-highlighting/archive/5eb677bb0fa9a3e60f0eff031dc13926e093df92.tar.gz", 49 + "hash": "1x33gk7hhp07jqq7yjvrsp2vmdbxmadlv3335ixx29bc6h8106r9" 50 + } 51 + }, 52 + "version": 3 53 + }
+22 -23
packages/advcp/default.nix
··· 2 2 stdenv, 3 3 fetchurl, 4 4 fetchpatch, 5 - ... 6 - }: let 7 - upstream = "coreutils"; 8 - in 9 - stdenv.mkDerivation rec { 10 - name = "advcp"; 11 - version = "8.30"; 5 + upstream ? "coreutils", 6 + }: 7 + stdenv.mkDerivation rec { 8 + name = "advcp"; 9 + version = "9.1"; 10 + strictDeps = true; 12 11 13 - src = fetchurl { 14 - name = "source-${name}-${version}.tar.xz"; 15 - url = "ftp://ftp.gnu.org/gnu/${upstream}/${upstream}-${version}.tar.xz"; 16 - sha256 = "0mxhw43d4wpqmvg0l4znk1vm10fy92biyh90lzdnqjcic2lb6cg8"; 17 - }; 12 + src = fetchurl { 13 + name = "source-${name}-${version}.tar.xz"; 14 + url = "ftp://ftp.gnu.org/gnu/${upstream}/${upstream}-${version}.tar.xz"; 15 + hash = "sha256-YaH0ENeLp+fzelpPUObRMgrKMzdUhKMlXt3xejhYBCM="; 16 + }; 18 17 19 - patches = [ 20 - (fetchpatch { 21 - url = "https://github.com/mrdrogdrog/advcpmv/raw/496bcc9f1e8a13768066c353c238a475ccb91329/advcpmv-0.8-8.30.patch"; 22 - sha256 = "0mw0ramg4ydqdqs33kw9m0rjvw5fvfa0scsq753pn7biwx6gx9hx"; 23 - }) 24 - ]; 18 + patches = [ 19 + (fetchpatch { 20 + url = "https://raw.githubusercontent.com/jarun/advcpmv/ea268d870b475edd5960dcd55d5378abc9705958/advcpmv-0.9-${version}.patch"; 21 + hash = "sha256-d+SRT/R4xmfHLAdOr7m4R3WFiW64P5ZH6iqDvErYCyg="; 22 + }) 23 + ]; 25 24 26 - installPhase = '' 27 - install -D src/cp $out/bin/advcp 28 - install -D src/mv $out/bin/advmv 29 - ''; 30 - } 25 + installPhase = '' 26 + install -D src/cp $out/bin/advcp 27 + install -D src/mv $out/bin/advmv 28 + ''; 29 + }
+27 -32
packages/default.nix
··· 1 - { 2 - self, 3 - emacs, 4 - ... 5 - } @ inputs: let 6 - pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; 7 - upkgs = inputs.unstable.legacyPackages.x86_64-linux; 8 - mpkgs = inputs.master.legacyPackages.x86_64-linux; 1 + {inputs, ...}: { 2 + perSystem = { 3 + system, 4 + pkgs, 5 + lib, 6 + inputs', 7 + ... 8 + }: let 9 + upkgs = inputs'.nixpkgs.legacyPackages; 9 10 10 - epkgs = import inputs.unstable { 11 - system = "x86_64-linux"; 12 - overlays = [emacs.overlay]; 11 + chromePkgs = import inputs.nixpkgs { 12 + inherit system; 13 + config.allowUnfree = true; 14 + config.google-chrome.enableWideVine = true; 15 + }; 16 + in { 17 + packages = lib.mkMerge [ 18 + { 19 + advcp = upkgs.callPackage ./advcp {}; 20 + "rofi/unicode" = upkgs.callPackage ./rofi-unicode {}; 21 + } 22 + (lib.mkIf pkgs.stdenv.isLinux { 23 + inherit (inputs'.switcher.packages) switcher; 24 + }) 25 + (lib.mkIf (system == "x86_64-linux") { 26 + inherit (chromePkgs) google-chrome; 27 + }) 28 + ]; 13 29 }; 14 - nodePkgs = upkgs.callPackages ./nodePackages/override.nix {}; 15 - in { 16 - "advcp" = pkgs.callPackage ./advcp {}; 17 - "gnucash-de" = upkgs.callPackage ./gnucash-de {}; 18 - "keyleds" = upkgs.callPackage ./keyleds {}; 19 - "dracula/konsole" = upkgs.callPackage ./dracula/konsole {}; 20 - "emacs" = epkgs.emacsGcc; 21 - "elixir-lsp" = upkgs.beam.packages.erlang.callPackage ./elixir-lsp {}; 22 - "erlang-ls" = upkgs.beam.packages.erlang.callPackage ./erlang-ls {}; 23 - "rofi/unicode" = upkgs.callPackage ./rofi-unicode {}; 24 - "zx" = upkgs.nodePackages.zx; 25 - "angular" = nodePkgs."@angular/cli"; 26 - 27 - "switcher" = upkgs.callPackage ./switcher { 28 - inherit (inputs.nix.packages.x86_64-linux) nix; 29 - inherit (inputs.home-manager.packages.x86_64-linux) home-manager; 30 - }; 31 - 32 - "rnix-lsp" = inputs.rnix-lsp.defaultPackage.x86_64-linux; 33 - "statix" = inputs.statix.defaultPackage.x86_64-linux; 34 - "alejandra" = inputs.alejandra.defaultPackage.x86_64-linux; 35 30 }
-23
packages/dracula/konsole/default.nix
··· 1 - { 2 - stdenv, 3 - fetchFromGitHub, 4 - }: 5 - stdenv.mkDerivation rec { 6 - pname = "dracula-konsole-theme"; 7 - version = "fa85573"; 8 - 9 - src = fetchFromGitHub { 10 - name = "${pname}-${version}-source"; 11 - owner = "dracula"; 12 - repo = "konsole"; 13 - rev = version; 14 - sha256 = "sha256-375TOAOEx9FObS9F2tMYEyKboTYCZycawGoNEolZ0Ns="; 15 - }; 16 - 17 - phases = ["unpackPhase" "installPhase"]; 18 - 19 - installPhase = '' 20 - mkdir -p $out/share/konsole 21 - cp Dracula.colorscheme $out/share/konsole 22 - ''; 23 - }
-64
packages/elixir-lsp/default.nix
··· 1 - { 2 - stdenv, 3 - erlang, 4 - elixir, 5 - rebar3, 6 - hex, 7 - callPackage, 8 - git, 9 - cacert, 10 - fetchFromGitHub, 11 - }: let 12 - fetchMixDeps = callPackage ./fetch-mix-deps.nix {inherit rebar3;}; 13 - 14 - source = builtins.fromJSON (builtins.readFile ./source.json); 15 - in 16 - stdenv.mkDerivation rec { 17 - name = "elixir-ls"; 18 - version = "${source.version}-${erlang.version}-${elixir.version}"; 19 - 20 - nativeBuildInputs = [elixir hex git deps cacert]; 21 - 22 - deps = fetchMixDeps { 23 - name = "${name}-${version}"; 24 - inherit src; 25 - sha256 = "sha256-8MOV2a/C5uO5Q1S97XY8VP0bJI4ByFRIIHNwRtG94cs="; 26 - }; 27 - 28 - src = fetchFromGitHub rec { 29 - name = "source-${owner}-${repo}-${version}"; 30 - inherit (source) owner repo rev sha256; 31 - }; 32 - 33 - dontStrip = true; 34 - 35 - configurePhase = '' 36 - export MIX_ENV=prod 37 - export HEX_OFFLINE=1 38 - export HEX_HOME="$PWD/hex" 39 - export MIX_HOME="$PWD" 40 - export MIX_REBAR3="${rebar3}/bin/rebar3" 41 - export REBAR_GLOBAL_CONFIG_DIR="$PWD/rebar3" 42 - export REBAR_CACHE_DIR="$PWD/rebar3.cache" 43 - cp --no-preserve=all -R ${deps} deps 44 - mix deps.compile --no-deps-check 45 - ''; 46 - 47 - buildPhase = '' 48 - mix do compile --no-deps-check, elixir_ls.release 49 - ''; 50 - 51 - installPhase = '' 52 - mkdir -p $out/bin 53 - cp -Rv release $out/lib 54 - # Prepare the wrapper script 55 - substitute release/language_server.sh $out/bin/elixir-ls \ 56 - --replace 'exec "''${dir}/launch.sh"' "exec $out/lib/launch.sh" 57 - chmod +x $out/bin/elixir-ls 58 - # prepare the launcher 59 - substituteInPlace $out/lib/launch.sh \ 60 - --replace "elixir" "${elixir}/bin/elixir" \ 61 - --replace "ERL_LIBS=\"\$SCRIPTPATH:\$ERL_LIBS\"" \ 62 - "ERL_LIBS=$out/lib:\$ERL_LIBS" 63 - ''; 64 - }
-53
packages/elixir-lsp/fetch-mix-deps.nix
··· 1 - { 2 - stdenvNoCC, 3 - lib, 4 - elixir, 5 - rebar, 6 - rebar3, 7 - git, 8 - cacert, 9 - }: { 10 - name ? null, 11 - src, 12 - sha256 ? null, 13 - env ? "prod", 14 - }: 15 - stdenvNoCC.mkDerivation { 16 - name = 17 - "mix-deps" 18 - + ( 19 - if name != null 20 - then "-${name}" 21 - else "" 22 - ); 23 - 24 - nativeBuildInputs = [elixir git cacert]; 25 - 26 - inherit src; 27 - 28 - configurePhase = '' 29 - export MIX_ENV="${env}" 30 - export HEX_HOME="$PWD/hex" 31 - export MIX_HOME="$PWD/mix" 32 - export MIX_DEPS_PATH="$out" 33 - export MIX_REBAR="${rebar}/bin/rebar" 34 - export MIX_REBAR3="${rebar3}/bin/rebar3" 35 - export REBAR_GLOBAL_CONFIG_DIR="$PWD/rebar3" 36 - export REBAR_CACHE_DIR="$PWD/rebar3.cache" 37 - # mix local.rebar --force 38 - mix local.hex --force 39 - ''; 40 - 41 - buildPhase = '' 42 - mix deps.get 43 - find "$out" -path '*/.git/*' -a ! -name HEAD -exec rm -rf {} + 44 - ''; 45 - 46 - dontInstall = true; 47 - 48 - outputHashAlgo = "sha256"; 49 - outputHashMode = "recursive"; 50 - outputHash = sha256; 51 - 52 - impureEnvVars = lib.fetchers.proxyImpureEnvVars; 53 - }
-8
packages/elixir-lsp/source.json
··· 1 - { 2 - "fetchSubmodules": true, 3 - "owner": "elixir-lsp", 4 - "repo": "elixir-ls", 5 - "rev": "v0.8.1", 6 - "sha256": "sha256-KlZq12RCor9GrwA8QMP3R+jUQ/xFHRjkLwwkvthiMU0=", 7 - "version": "0.8.1" 8 - }
-70
packages/erlang-ls/default.nix
··· 1 - { 2 - stdenv, 3 - erlang, 4 - rebar3, 5 - lib, 6 - rebar3Relx, 7 - fetchFromGitHub, 8 - git, 9 - cacert, 10 - }: let 11 - source = builtins.fromJSON (builtins.readFile ./source.json); 12 - 13 - fetchRebar3Deps = { 14 - name, 15 - version, 16 - sha256, 17 - src, 18 - meta ? {}, 19 - }: 20 - stdenv.mkDerivation { 21 - name = "rebar-deps-${name}-${version}"; 22 - 23 - buildInputs = [git cacert]; 24 - 25 - phases = ["downloadPhase" "installPhase"]; 26 - 27 - downloadPhase = '' 28 - cp ${src} . 29 - HOME='.' DEBUG=1 ${rebar3}/bin/rebar3 get-deps 30 - ''; 31 - 32 - installPhase = '' 33 - mkdir -p "$out/_checkouts" 34 - for i in ./_build/default/lib/* ; do 35 - echo "$i" 36 - rm -rf "$i"/.git 37 - cp -R "$i" "$out/_checkouts" 38 - done 39 - ''; 40 - 41 - outputHashAlgo = "sha256"; 42 - outputHashMode = "recursive"; 43 - outputHash = sha256; 44 - 45 - # impureEnvVars = lib.fetchers.proxyImpureEnvVars; 46 - inherit meta; 47 - }; 48 - in 49 - rebar3Relx rec { 50 - pname = "erlang-ls"; 51 - version = "${source.version}-${erlang.version}"; 52 - releaseType = "escript"; 53 - 54 - checkouts = fetchRebar3Deps { 55 - inherit version; 56 - name = pname; 57 - src = "${src}/rebar.lock"; 58 - sha256 = "sha256-nm3e5DfehSCjjTPADSzohilOBFW4QiXnokwVNrpDZ1E="; 59 - }; 60 - 61 - postPatch = '' 62 - substituteInPlace apps/els_lsp/src/els_lsp.app.src \ 63 - --replace '{vsn, git}' '{vsn, "${version}"}' 64 - ''; 65 - 66 - src = fetchFromGitHub { 67 - name = "source-${pname}-${version}"; 68 - inherit (source) owner repo rev sha256; 69 - }; 70 - }
-8
packages/erlang-ls/source.json
··· 1 - { 2 - "version": "0.20.0", 3 - "owner": "erlang-ls", 4 - "repo": "erlang_ls", 5 - "rev": "0.20.0", 6 - "sha256": "sha256-XBCauvPalIPjVOYlMfWC+5mKku28b/qqKhp9NgSkoyA=", 7 - "fetchSubmodules": true 8 - }
-14
packages/gnucash-de/default.nix
··· 1 - { 2 - runCommand, 3 - makeWrapper, 4 - gnucash, 5 - }: 6 - runCommand "gnucash-de-${gnucash.version}" 7 - { 8 - nativeBuildInputs = [makeWrapper]; 9 - } '' 10 - mkdir -p $out/{bin,share/applications} 11 - makeWrapper ${gnucash}/bin/gnucash $out/bin/gnucash \ 12 - --set LANG de_DE.UTF-8 13 - ln -s ${gnucash}/share/applications/gnucash.desktop $out/share/applications/gnucash.desktop 14 - ''
-21
packages/keyleds/default.nix
··· 1 - { 2 - pkgs, 3 - stdenv, 4 - fetchFromGitHub, 5 - ... 6 - }: 7 - stdenv.mkDerivation rec { 8 - name = "keyleds"; 9 - version = "1.1.1"; 10 - 11 - src = fetchFromGitHub { 12 - name = "source-${name}-${version}"; 13 - owner = "keyleds"; 14 - repo = "keyleds"; 15 - rev = "v${version}"; 16 - sha256 = "sha256-KCWmaRmJTmZgTt7HW9o6Jt1u4x6+G2j6T9EqVt21U18="; 17 - }; 18 - 19 - nativeBuildInputs = with pkgs; [cmake pkgconfig]; 20 - buildInputs = with pkgs; [xlibsWrapper xorg.libXi libuv systemd luajit libyaml]; 21 - }
-22
packages/nodePackages/default.nix
··· 1 - # This file has been generated by node2nix 1.9.0. Do not edit! 2 - { 3 - pkgs ? 4 - import <nixpkgs> { 5 - inherit system; 6 - }, 7 - system ? builtins.currentSystem, 8 - nodejs ? pkgs."nodejs-12_x", 9 - }: let 10 - nodeEnv = import ./node-env.nix { 11 - inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; 12 - inherit pkgs nodejs; 13 - libtool = 14 - if pkgs.stdenv.isDarwin 15 - then pkgs.darwin.cctools 16 - else null; 17 - }; 18 - in 19 - import ./node-packages.nix { 20 - inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit; 21 - inherit nodeEnv; 22 - }
-629
packages/nodePackages/node-env.nix
··· 1 - # This file originates from node2nix 2 - { 3 - lib, 4 - stdenv, 5 - nodejs, 6 - python2, 7 - pkgs, 8 - libtool, 9 - runCommand, 10 - writeTextFile, 11 - writeShellScript, 12 - }: let 13 - # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master 14 - utillinux = 15 - if pkgs ? utillinux 16 - then pkgs.utillinux 17 - else pkgs.util-linux; 18 - 19 - python = 20 - if nodejs ? python 21 - then nodejs.python 22 - else python2; 23 - 24 - # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise 25 - tarWrapper = runCommand "tarWrapper" {} '' 26 - mkdir -p $out/bin 27 - 28 - cat > $out/bin/tar <<EOF 29 - #! ${stdenv.shell} -e 30 - $(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore 31 - EOF 32 - 33 - chmod +x $out/bin/tar 34 - ''; 35 - 36 - # Function that generates a TGZ file from a NPM project 37 - buildNodeSourceDist = { 38 - name, 39 - version, 40 - src, 41 - ... 42 - }: 43 - stdenv.mkDerivation { 44 - name = "node-tarball-${name}-${version}"; 45 - inherit src; 46 - buildInputs = [nodejs]; 47 - buildPhase = '' 48 - export HOME=$TMPDIR 49 - tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts) 50 - ''; 51 - installPhase = '' 52 - mkdir -p $out/tarballs 53 - mv $tgzFile $out/tarballs 54 - mkdir -p $out/nix-support 55 - echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products 56 - ''; 57 - }; 58 - 59 - # Common shell logic 60 - installPackage = writeShellScript "install-package" '' 61 - installPackage() { 62 - local packageName=$1 src=$2 63 - 64 - local strippedName 65 - 66 - local DIR=$PWD 67 - cd $TMPDIR 68 - 69 - unpackFile $src 70 - 71 - # Make the base dir in which the target dependency resides first 72 - mkdir -p "$(dirname "$DIR/$packageName")" 73 - 74 - if [ -f "$src" ] 75 - then 76 - # Figure out what directory has been unpacked 77 - packageDir="$(find . -maxdepth 1 -type d | tail -1)" 78 - 79 - # Restore write permissions to make building work 80 - find "$packageDir" -type d -exec chmod u+x {} \; 81 - chmod -R u+w "$packageDir" 82 - 83 - # Move the extracted tarball into the output folder 84 - mv "$packageDir" "$DIR/$packageName" 85 - elif [ -d "$src" ] 86 - then 87 - # Get a stripped name (without hash) of the source directory. 88 - # On old nixpkgs it's already set internally. 89 - if [ -z "$strippedName" ] 90 - then 91 - strippedName="$(stripHash $src)" 92 - fi 93 - 94 - # Restore write permissions to make building work 95 - chmod -R u+w "$strippedName" 96 - 97 - # Move the extracted directory into the output folder 98 - mv "$strippedName" "$DIR/$packageName" 99 - fi 100 - 101 - # Change to the package directory to install dependencies 102 - cd "$DIR/$packageName" 103 - } 104 - ''; 105 - 106 - # Bundle the dependencies of the package 107 - # 108 - # Only include dependencies if they don't exist. They may also be bundled in the package. 109 - includeDependencies = {dependencies}: 110 - lib.optionalString (dependencies != []) ( 111 - '' 112 - mkdir -p node_modules 113 - cd node_modules 114 - '' 115 - + (lib.concatMapStrings ( 116 - dependency: '' 117 - if [ ! -e "${dependency.name}" ]; then 118 - ${composePackage dependency} 119 - fi 120 - '' 121 - ) 122 - dependencies) 123 - + '' 124 - cd .. 125 - '' 126 - ); 127 - 128 - # Recursively composes the dependencies of a package 129 - composePackage = { 130 - name, 131 - packageName, 132 - src, 133 - dependencies ? [], 134 - ... 135 - } @ args: 136 - builtins.addErrorContext "while evaluating node package '${packageName}'" '' 137 - installPackage "${packageName}" "${src}" 138 - ${includeDependencies {inherit dependencies;}} 139 - cd .. 140 - ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} 141 - ''; 142 - 143 - pinpointDependencies = { 144 - dependencies, 145 - production, 146 - }: let 147 - pinpointDependenciesFromPackageJSON = writeTextFile { 148 - name = "pinpointDependencies.js"; 149 - text = '' 150 - var fs = require('fs'); 151 - var path = require('path'); 152 - 153 - function resolveDependencyVersion(location, name) { 154 - if(location == process.env['NIX_STORE']) { 155 - return null; 156 - } else { 157 - var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); 158 - 159 - if(fs.existsSync(dependencyPackageJSON)) { 160 - var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); 161 - 162 - if(dependencyPackageObj.name == name) { 163 - return dependencyPackageObj.version; 164 - } 165 - } else { 166 - return resolveDependencyVersion(path.resolve(location, ".."), name); 167 - } 168 - } 169 - } 170 - 171 - function replaceDependencies(dependencies) { 172 - if(typeof dependencies == "object" && dependencies !== null) { 173 - for(var dependency in dependencies) { 174 - var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); 175 - 176 - if(resolvedVersion === null) { 177 - process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); 178 - } else { 179 - dependencies[dependency] = resolvedVersion; 180 - } 181 - } 182 - } 183 - } 184 - 185 - /* Read the package.json configuration */ 186 - var packageObj = JSON.parse(fs.readFileSync('./package.json')); 187 - 188 - /* Pinpoint all dependencies */ 189 - replaceDependencies(packageObj.dependencies); 190 - if(process.argv[2] == "development") { 191 - replaceDependencies(packageObj.devDependencies); 192 - } 193 - replaceDependencies(packageObj.optionalDependencies); 194 - 195 - /* Write the fixed package.json file */ 196 - fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); 197 - ''; 198 - }; 199 - in '' 200 - node ${pinpointDependenciesFromPackageJSON} ${ 201 - if production 202 - then "production" 203 - else "development" 204 - } 205 - 206 - ${lib.optionalString (dependencies != []) 207 - '' 208 - if [ -d node_modules ] 209 - then 210 - cd node_modules 211 - ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} 212 - cd .. 213 - fi 214 - ''} 215 - ''; 216 - 217 - # Recursively traverses all dependencies of a package and pinpoints all 218 - # dependencies in the package.json file to the versions that are actually 219 - # being used. 220 - 221 - pinpointDependenciesOfPackage = { 222 - packageName, 223 - dependencies ? [], 224 - production ? true, 225 - ... 226 - } @ args: '' 227 - if [ -d "${packageName}" ] 228 - then 229 - cd "${packageName}" 230 - ${pinpointDependencies {inherit dependencies production;}} 231 - cd .. 232 - ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} 233 - fi 234 - ''; 235 - 236 - # Extract the Node.js source code which is used to compile packages with 237 - # native bindings 238 - nodeSources = runCommand "node-sources" {} '' 239 - tar --no-same-owner --no-same-permissions -xf ${nodejs.src} 240 - mv node-* $out 241 - ''; 242 - 243 - # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) 244 - addIntegrityFieldsScript = writeTextFile { 245 - name = "addintegrityfields.js"; 246 - text = '' 247 - var fs = require('fs'); 248 - var path = require('path'); 249 - 250 - function augmentDependencies(baseDir, dependencies) { 251 - for(var dependencyName in dependencies) { 252 - var dependency = dependencies[dependencyName]; 253 - 254 - // Open package.json and augment metadata fields 255 - var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); 256 - var packageJSONPath = path.join(packageJSONDir, "package.json"); 257 - 258 - if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored 259 - console.log("Adding metadata fields to: "+packageJSONPath); 260 - var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); 261 - 262 - if(dependency.integrity) { 263 - packageObj["_integrity"] = dependency.integrity; 264 - } else { 265 - packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. 266 - } 267 - 268 - if(dependency.resolved) { 269 - packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided 270 - } else { 271 - packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. 272 - } 273 - 274 - if(dependency.from !== undefined) { // Adopt from property if one has been provided 275 - packageObj["_from"] = dependency.from; 276 - } 277 - 278 - fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); 279 - } 280 - 281 - // Augment transitive dependencies 282 - if(dependency.dependencies !== undefined) { 283 - augmentDependencies(packageJSONDir, dependency.dependencies); 284 - } 285 - } 286 - } 287 - 288 - if(fs.existsSync("./package-lock.json")) { 289 - var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); 290 - 291 - if(![1, 2].includes(packageLock.lockfileVersion)) { 292 - process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n"); 293 - process.exit(1); 294 - } 295 - 296 - if(packageLock.dependencies !== undefined) { 297 - augmentDependencies(".", packageLock.dependencies); 298 - } 299 - } 300 - ''; 301 - }; 302 - 303 - # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes 304 - reconstructPackageLock = writeTextFile { 305 - name = "addintegrityfields.js"; 306 - text = '' 307 - var fs = require('fs'); 308 - var path = require('path'); 309 - 310 - var packageObj = JSON.parse(fs.readFileSync("package.json")); 311 - 312 - var lockObj = { 313 - name: packageObj.name, 314 - version: packageObj.version, 315 - lockfileVersion: 1, 316 - requires: true, 317 - dependencies: {} 318 - }; 319 - 320 - function augmentPackageJSON(filePath, dependencies) { 321 - var packageJSON = path.join(filePath, "package.json"); 322 - if(fs.existsSync(packageJSON)) { 323 - var packageObj = JSON.parse(fs.readFileSync(packageJSON)); 324 - dependencies[packageObj.name] = { 325 - version: packageObj.version, 326 - integrity: "sha1-000000000000000000000000000=", 327 - dependencies: {} 328 - }; 329 - processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); 330 - } 331 - } 332 - 333 - function processDependencies(dir, dependencies) { 334 - if(fs.existsSync(dir)) { 335 - var files = fs.readdirSync(dir); 336 - 337 - files.forEach(function(entry) { 338 - var filePath = path.join(dir, entry); 339 - var stats = fs.statSync(filePath); 340 - 341 - if(stats.isDirectory()) { 342 - if(entry.substr(0, 1) == "@") { 343 - // When we encounter a namespace folder, augment all packages belonging to the scope 344 - var pkgFiles = fs.readdirSync(filePath); 345 - 346 - pkgFiles.forEach(function(entry) { 347 - if(stats.isDirectory()) { 348 - var pkgFilePath = path.join(filePath, entry); 349 - augmentPackageJSON(pkgFilePath, dependencies); 350 - } 351 - }); 352 - } else { 353 - augmentPackageJSON(filePath, dependencies); 354 - } 355 - } 356 - }); 357 - } 358 - } 359 - 360 - processDependencies("node_modules", lockObj.dependencies); 361 - 362 - fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); 363 - ''; 364 - }; 365 - 366 - prepareAndInvokeNPM = { 367 - packageName, 368 - bypassCache, 369 - reconstructLock, 370 - npmFlags, 371 - production, 372 - }: let 373 - forceOfflineFlag = 374 - if bypassCache 375 - then "--offline" 376 - else "--registry http://www.example.com"; 377 - in '' 378 - # Pinpoint the versions of all dependencies to the ones that are actually being used 379 - echo "pinpointing versions of dependencies..." 380 - source $pinpointDependenciesScriptPath 381 - 382 - # Patch the shebangs of the bundled modules to prevent them from 383 - # calling executables outside the Nix store as much as possible 384 - patchShebangs . 385 - 386 - # Deploy the Node.js package by running npm install. Since the 387 - # dependencies have been provided already by ourselves, it should not 388 - # attempt to install them again, which is good, because we want to make 389 - # it Nix's responsibility. If it needs to install any dependencies 390 - # anyway (e.g. because the dependency parameters are 391 - # incomplete/incorrect), it fails. 392 - # 393 - # The other responsibilities of NPM are kept -- version checks, build 394 - # steps, postprocessing etc. 395 - 396 - export HOME=$TMPDIR 397 - cd "${packageName}" 398 - runHook preRebuild 399 - 400 - ${lib.optionalString bypassCache '' 401 - ${lib.optionalString reconstructLock '' 402 - if [ -f package-lock.json ] 403 - then 404 - echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!" 405 - echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!" 406 - rm package-lock.json 407 - else 408 - echo "No package-lock.json file found, reconstructing..." 409 - fi 410 - 411 - node ${reconstructPackageLock} 412 - ''} 413 - 414 - node ${addIntegrityFieldsScript} 415 - ''} 416 - 417 - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild 418 - 419 - if [ "''${dontNpmInstall-}" != "1" ] 420 - then 421 - # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. 422 - rm -f npm-shrinkwrap.json 423 - 424 - npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install 425 - fi 426 - ''; 427 - 428 - # Builds and composes an NPM package including all its dependencies 429 - buildNodePackage = { 430 - name, 431 - packageName, 432 - version, 433 - dependencies ? [], 434 - buildInputs ? [], 435 - production ? true, 436 - npmFlags ? "", 437 - dontNpmInstall ? false, 438 - bypassCache ? false, 439 - reconstructLock ? false, 440 - preRebuild ? "", 441 - dontStrip ? true, 442 - unpackPhase ? "true", 443 - buildPhase ? "true", 444 - meta ? {}, 445 - ... 446 - } @ args: let 447 - extraArgs = removeAttrs args ["name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta"]; 448 - in 449 - stdenv.mkDerivation ({ 450 - name = "${name}-${version}"; 451 - buildInputs = 452 - [tarWrapper python nodejs] 453 - ++ lib.optional (stdenv.isLinux) utillinux 454 - ++ lib.optional (stdenv.isDarwin) libtool 455 - ++ buildInputs; 456 - 457 - inherit nodejs; 458 - 459 - inherit dontStrip; # Stripping may fail a build for some package deployments 460 - inherit dontNpmInstall preRebuild unpackPhase buildPhase; 461 - 462 - compositionScript = composePackage args; 463 - pinpointDependenciesScript = pinpointDependenciesOfPackage args; 464 - 465 - passAsFile = ["compositionScript" "pinpointDependenciesScript"]; 466 - 467 - installPhase = '' 468 - source ${installPackage} 469 - 470 - # Create and enter a root node_modules/ folder 471 - mkdir -p $out/lib/node_modules 472 - cd $out/lib/node_modules 473 - 474 - # Compose the package and all its dependencies 475 - source $compositionScriptPath 476 - 477 - ${prepareAndInvokeNPM {inherit packageName bypassCache reconstructLock npmFlags production;}} 478 - 479 - # Create symlink to the deployed executable folder, if applicable 480 - if [ -d "$out/lib/node_modules/.bin" ] 481 - then 482 - ln -s $out/lib/node_modules/.bin $out/bin 483 - fi 484 - 485 - # Create symlinks to the deployed manual page folders, if applicable 486 - if [ -d "$out/lib/node_modules/${packageName}/man" ] 487 - then 488 - mkdir -p $out/share 489 - for dir in "$out/lib/node_modules/${packageName}/man/"* 490 - do 491 - mkdir -p $out/share/man/$(basename "$dir") 492 - for page in "$dir"/* 493 - do 494 - ln -s $page $out/share/man/$(basename "$dir") 495 - done 496 - done 497 - fi 498 - 499 - # Run post install hook, if provided 500 - runHook postInstall 501 - ''; 502 - 503 - meta = 504 - { 505 - # default to Node.js' platforms 506 - platforms = nodejs.meta.platforms; 507 - } 508 - // meta; 509 - } 510 - // extraArgs); 511 - 512 - # Builds a node environment (a node_modules folder and a set of binaries) 513 - buildNodeDependencies = { 514 - name, 515 - packageName, 516 - version, 517 - src, 518 - dependencies ? [], 519 - buildInputs ? [], 520 - production ? true, 521 - npmFlags ? "", 522 - dontNpmInstall ? false, 523 - bypassCache ? false, 524 - reconstructLock ? false, 525 - dontStrip ? true, 526 - unpackPhase ? "true", 527 - buildPhase ? "true", 528 - ... 529 - } @ args: let 530 - extraArgs = removeAttrs args ["name" "dependencies" "buildInputs"]; 531 - in 532 - stdenv.mkDerivation ({ 533 - name = "node-dependencies-${name}-${version}"; 534 - 535 - buildInputs = 536 - [tarWrapper python nodejs] 537 - ++ lib.optional (stdenv.isLinux) utillinux 538 - ++ lib.optional (stdenv.isDarwin) libtool 539 - ++ buildInputs; 540 - 541 - inherit dontStrip; # Stripping may fail a build for some package deployments 542 - inherit dontNpmInstall unpackPhase buildPhase; 543 - 544 - includeScript = includeDependencies {inherit dependencies;}; 545 - pinpointDependenciesScript = pinpointDependenciesOfPackage args; 546 - 547 - passAsFile = ["includeScript" "pinpointDependenciesScript"]; 548 - 549 - installPhase = '' 550 - source ${installPackage} 551 - 552 - mkdir -p $out/${packageName} 553 - cd $out/${packageName} 554 - 555 - source $includeScriptPath 556 - 557 - # Create fake package.json to make the npm commands work properly 558 - cp ${src}/package.json . 559 - chmod 644 package.json 560 - ${lib.optionalString bypassCache '' 561 - if [ -f ${src}/package-lock.json ] 562 - then 563 - cp ${src}/package-lock.json . 564 - fi 565 - ''} 566 - 567 - # Go to the parent folder to make sure that all packages are pinpointed 568 - cd .. 569 - ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} 570 - 571 - ${prepareAndInvokeNPM {inherit packageName bypassCache reconstructLock npmFlags production;}} 572 - 573 - # Expose the executables that were installed 574 - cd .. 575 - ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} 576 - 577 - mv ${packageName} lib 578 - ln -s $out/lib/node_modules/.bin $out/bin 579 - ''; 580 - } 581 - // extraArgs); 582 - 583 - # Builds a development shell 584 - buildNodeShell = { 585 - name, 586 - packageName, 587 - version, 588 - src, 589 - dependencies ? [], 590 - buildInputs ? [], 591 - production ? true, 592 - npmFlags ? "", 593 - dontNpmInstall ? false, 594 - bypassCache ? false, 595 - reconstructLock ? false, 596 - dontStrip ? true, 597 - unpackPhase ? "true", 598 - buildPhase ? "true", 599 - ... 600 - } @ args: let 601 - nodeDependencies = buildNodeDependencies args; 602 - in 603 - stdenv.mkDerivation { 604 - name = "node-shell-${name}-${version}"; 605 - 606 - buildInputs = [python nodejs] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs; 607 - buildCommand = '' 608 - mkdir -p $out/bin 609 - cat > $out/bin/shell <<EOF 610 - #! ${stdenv.shell} -e 611 - $shellHook 612 - exec ${stdenv.shell} 613 - EOF 614 - chmod +x $out/bin/shell 615 - ''; 616 - 617 - # Provide the dependencies in a development shell through the NODE_PATH environment variable 618 - inherit nodeDependencies; 619 - shellHook = lib.optionalString (dependencies != []) '' 620 - export NODE_PATH=${nodeDependencies}/lib/node_modules 621 - export PATH="${nodeDependencies}/bin:$PATH" 622 - ''; 623 - }; 624 - in { 625 - buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist; 626 - buildNodePackage = lib.makeOverridable buildNodePackage; 627 - buildNodeDependencies = lib.makeOverridable buildNodeDependencies; 628 - buildNodeShell = lib.makeOverridable buildNodeShell; 629 - }
-3
packages/nodePackages/node-packages.json
··· 1 - [ 2 - "@angular/cli" 3 - ]
-1940
packages/nodePackages/node-packages.nix
··· 1 - # This file has been generated by node2nix 1.9.0. Do not edit! 2 - { 3 - nodeEnv, 4 - fetchurl, 5 - fetchgit, 6 - nix-gitignore, 7 - stdenv, 8 - lib, 9 - globalBuildInputs ? [], 10 - }: let 11 - sources = { 12 - "@angular-devkit/architect-0.1303.0" = { 13 - name = "_at_angular-devkit_slash_architect"; 14 - packageName = "@angular-devkit/architect"; 15 - version = "0.1303.0"; 16 - src = fetchurl { 17 - url = "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.0.tgz"; 18 - sha512 = "kTcKB917ICA8j53SGo4gn+qAlzx8si+iHnOTbp5QlMr7qt/Iz07SVVI8mRlMD6c6lr7eE/fVlCLzEZ1+WCQpTA=="; 19 - }; 20 - }; 21 - "@angular-devkit/core-13.3.0" = { 22 - name = "_at_angular-devkit_slash_core"; 23 - packageName = "@angular-devkit/core"; 24 - version = "13.3.0"; 25 - src = fetchurl { 26 - url = "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.0.tgz"; 27 - sha512 = "8YrreVbWlJVZnk5zs4vfkRItrPEtWhUcxWOBfYT/Kwu4FwJVAnNuhJAxxXOAQ2Ckd7cv30Idh/RFVLbTZ5Gs9w=="; 28 - }; 29 - }; 30 - "@angular-devkit/schematics-13.3.0" = { 31 - name = "_at_angular-devkit_slash_schematics"; 32 - packageName = "@angular-devkit/schematics"; 33 - version = "13.3.0"; 34 - src = fetchurl { 35 - url = "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.0.tgz"; 36 - sha512 = "hq7tqnB3uVT/iDgqWWZ4kvnijeAcgd4cfLzZiCPaYn1nuhZf0tWsho6exhJ/odMZHvVp7w8OibqWiUKxNY9zHA=="; 37 - }; 38 - }; 39 - "@gar/promisify-1.1.3" = { 40 - name = "_at_gar_slash_promisify"; 41 - packageName = "@gar/promisify"; 42 - version = "1.1.3"; 43 - src = fetchurl { 44 - url = "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz"; 45 - sha512 = "k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="; 46 - }; 47 - }; 48 - "@npmcli/fs-1.1.1" = { 49 - name = "_at_npmcli_slash_fs"; 50 - packageName = "@npmcli/fs"; 51 - version = "1.1.1"; 52 - src = fetchurl { 53 - url = "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz"; 54 - sha512 = "8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ=="; 55 - }; 56 - }; 57 - "@npmcli/git-2.1.0" = { 58 - name = "_at_npmcli_slash_git"; 59 - packageName = "@npmcli/git"; 60 - version = "2.1.0"; 61 - src = fetchurl { 62 - url = "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz"; 63 - sha512 = "/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw=="; 64 - }; 65 - }; 66 - "@npmcli/installed-package-contents-1.0.7" = { 67 - name = "_at_npmcli_slash_installed-package-contents"; 68 - packageName = "@npmcli/installed-package-contents"; 69 - version = "1.0.7"; 70 - src = fetchurl { 71 - url = "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz"; 72 - sha512 = "9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw=="; 73 - }; 74 - }; 75 - "@npmcli/move-file-1.1.2" = { 76 - name = "_at_npmcli_slash_move-file"; 77 - packageName = "@npmcli/move-file"; 78 - version = "1.1.2"; 79 - src = fetchurl { 80 - url = "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz"; 81 - sha512 = "1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg=="; 82 - }; 83 - }; 84 - "@npmcli/node-gyp-1.0.3" = { 85 - name = "_at_npmcli_slash_node-gyp"; 86 - packageName = "@npmcli/node-gyp"; 87 - version = "1.0.3"; 88 - src = fetchurl { 89 - url = "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz"; 90 - sha512 = "fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA=="; 91 - }; 92 - }; 93 - "@npmcli/promise-spawn-1.3.2" = { 94 - name = "_at_npmcli_slash_promise-spawn"; 95 - packageName = "@npmcli/promise-spawn"; 96 - version = "1.3.2"; 97 - src = fetchurl { 98 - url = "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz"; 99 - sha512 = "QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg=="; 100 - }; 101 - }; 102 - "@npmcli/run-script-2.0.0" = { 103 - name = "_at_npmcli_slash_run-script"; 104 - packageName = "@npmcli/run-script"; 105 - version = "2.0.0"; 106 - src = fetchurl { 107 - url = "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz"; 108 - sha512 = "fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig=="; 109 - }; 110 - }; 111 - "@schematics/angular-13.3.0" = { 112 - name = "_at_schematics_slash_angular"; 113 - packageName = "@schematics/angular"; 114 - version = "13.3.0"; 115 - src = fetchurl { 116 - url = "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.0.tgz"; 117 - sha512 = "WND6DXWf0ZFefqlC2hUm1FzHDonRfGpDEPWVhVulhYkB7IUUaXuCz8K41HAScyJ3bxUngs2Lx9+4omikc05fxA=="; 118 - }; 119 - }; 120 - "@tootallnate/once-1.1.2" = { 121 - name = "_at_tootallnate_slash_once"; 122 - packageName = "@tootallnate/once"; 123 - version = "1.1.2"; 124 - src = fetchurl { 125 - url = "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz"; 126 - sha512 = "RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="; 127 - }; 128 - }; 129 - "@tootallnate/once-2.0.0" = { 130 - name = "_at_tootallnate_slash_once"; 131 - packageName = "@tootallnate/once"; 132 - version = "2.0.0"; 133 - src = fetchurl { 134 - url = "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz"; 135 - sha512 = "XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="; 136 - }; 137 - }; 138 - "@yarnpkg/lockfile-1.1.0" = { 139 - name = "_at_yarnpkg_slash_lockfile"; 140 - packageName = "@yarnpkg/lockfile"; 141 - version = "1.1.0"; 142 - src = fetchurl { 143 - url = "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz"; 144 - sha512 = "GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ=="; 145 - }; 146 - }; 147 - "abbrev-1.1.1" = { 148 - name = "abbrev"; 149 - packageName = "abbrev"; 150 - version = "1.1.1"; 151 - src = fetchurl { 152 - url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"; 153 - sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="; 154 - }; 155 - }; 156 - "agent-base-6.0.2" = { 157 - name = "agent-base"; 158 - packageName = "agent-base"; 159 - version = "6.0.2"; 160 - src = fetchurl { 161 - url = "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"; 162 - sha512 = "RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="; 163 - }; 164 - }; 165 - "agentkeepalive-4.2.1" = { 166 - name = "agentkeepalive"; 167 - packageName = "agentkeepalive"; 168 - version = "4.2.1"; 169 - src = fetchurl { 170 - url = "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz"; 171 - sha512 = "Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA=="; 172 - }; 173 - }; 174 - "aggregate-error-3.1.0" = { 175 - name = "aggregate-error"; 176 - packageName = "aggregate-error"; 177 - version = "3.1.0"; 178 - src = fetchurl { 179 - url = "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz"; 180 - sha512 = "4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="; 181 - }; 182 - }; 183 - "ajv-8.9.0" = { 184 - name = "ajv"; 185 - packageName = "ajv"; 186 - version = "8.9.0"; 187 - src = fetchurl { 188 - url = "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz"; 189 - sha512 = "qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ=="; 190 - }; 191 - }; 192 - "ajv-formats-2.1.1" = { 193 - name = "ajv-formats"; 194 - packageName = "ajv-formats"; 195 - version = "2.1.1"; 196 - src = fetchurl { 197 - url = "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz"; 198 - sha512 = "Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="; 199 - }; 200 - }; 201 - "ansi-colors-4.1.1" = { 202 - name = "ansi-colors"; 203 - packageName = "ansi-colors"; 204 - version = "4.1.1"; 205 - src = fetchurl { 206 - url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz"; 207 - sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="; 208 - }; 209 - }; 210 - "ansi-escapes-4.3.2" = { 211 - name = "ansi-escapes"; 212 - packageName = "ansi-escapes"; 213 - version = "4.3.2"; 214 - src = fetchurl { 215 - url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz"; 216 - sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="; 217 - }; 218 - }; 219 - "ansi-regex-5.0.1" = { 220 - name = "ansi-regex"; 221 - packageName = "ansi-regex"; 222 - version = "5.0.1"; 223 - src = fetchurl { 224 - url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"; 225 - sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="; 226 - }; 227 - }; 228 - "ansi-styles-4.3.0" = { 229 - name = "ansi-styles"; 230 - packageName = "ansi-styles"; 231 - version = "4.3.0"; 232 - src = fetchurl { 233 - url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"; 234 - sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="; 235 - }; 236 - }; 237 - "aproba-2.0.0" = { 238 - name = "aproba"; 239 - packageName = "aproba"; 240 - version = "2.0.0"; 241 - src = fetchurl { 242 - url = "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz"; 243 - sha512 = "lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="; 244 - }; 245 - }; 246 - "are-we-there-yet-3.0.0" = { 247 - name = "are-we-there-yet"; 248 - packageName = "are-we-there-yet"; 249 - version = "3.0.0"; 250 - src = fetchurl { 251 - url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz"; 252 - sha512 = "0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw=="; 253 - }; 254 - }; 255 - "balanced-match-1.0.2" = { 256 - name = "balanced-match"; 257 - packageName = "balanced-match"; 258 - version = "1.0.2"; 259 - src = fetchurl { 260 - url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"; 261 - sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="; 262 - }; 263 - }; 264 - "base64-js-1.5.1" = { 265 - name = "base64-js"; 266 - packageName = "base64-js"; 267 - version = "1.5.1"; 268 - src = fetchurl { 269 - url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"; 270 - sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="; 271 - }; 272 - }; 273 - "bl-4.1.0" = { 274 - name = "bl"; 275 - packageName = "bl"; 276 - version = "4.1.0"; 277 - src = fetchurl { 278 - url = "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"; 279 - sha512 = "1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="; 280 - }; 281 - }; 282 - "brace-expansion-1.1.11" = { 283 - name = "brace-expansion"; 284 - packageName = "brace-expansion"; 285 - version = "1.1.11"; 286 - src = fetchurl { 287 - url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"; 288 - sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="; 289 - }; 290 - }; 291 - "buffer-5.7.1" = { 292 - name = "buffer"; 293 - packageName = "buffer"; 294 - version = "5.7.1"; 295 - src = fetchurl { 296 - url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"; 297 - sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="; 298 - }; 299 - }; 300 - "builtins-1.0.3" = { 301 - name = "builtins"; 302 - packageName = "builtins"; 303 - version = "1.0.3"; 304 - src = fetchurl { 305 - url = "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz"; 306 - sha1 = "cb94faeb61c8696451db36534e1422f94f0aee88"; 307 - }; 308 - }; 309 - "cacache-15.3.0" = { 310 - name = "cacache"; 311 - packageName = "cacache"; 312 - version = "15.3.0"; 313 - src = fetchurl { 314 - url = "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz"; 315 - sha512 = "VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ=="; 316 - }; 317 - }; 318 - "cacache-16.0.2" = { 319 - name = "cacache"; 320 - packageName = "cacache"; 321 - version = "16.0.2"; 322 - src = fetchurl { 323 - url = "https://registry.npmjs.org/cacache/-/cacache-16.0.2.tgz"; 324 - sha512 = "Q17j7s8X81i/QYVrKVQ/qwWGT+pYLfpTcZ+X+p/Qw9FULy9JEfb2FECYTTt6mPV6A/vk92nRZ80ncpKxiGTrIA=="; 325 - }; 326 - }; 327 - "chalk-4.1.2" = { 328 - name = "chalk"; 329 - packageName = "chalk"; 330 - version = "4.1.2"; 331 - src = fetchurl { 332 - url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"; 333 - sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="; 334 - }; 335 - }; 336 - "chardet-0.7.0" = { 337 - name = "chardet"; 338 - packageName = "chardet"; 339 - version = "0.7.0"; 340 - src = fetchurl { 341 - url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"; 342 - sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="; 343 - }; 344 - }; 345 - "chownr-2.0.0" = { 346 - name = "chownr"; 347 - packageName = "chownr"; 348 - version = "2.0.0"; 349 - src = fetchurl { 350 - url = "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"; 351 - sha512 = "bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="; 352 - }; 353 - }; 354 - "clean-stack-2.2.0" = { 355 - name = "clean-stack"; 356 - packageName = "clean-stack"; 357 - version = "2.2.0"; 358 - src = fetchurl { 359 - url = "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz"; 360 - sha512 = "4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="; 361 - }; 362 - }; 363 - "cli-cursor-3.1.0" = { 364 - name = "cli-cursor"; 365 - packageName = "cli-cursor"; 366 - version = "3.1.0"; 367 - src = fetchurl { 368 - url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz"; 369 - sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="; 370 - }; 371 - }; 372 - "cli-spinners-2.6.1" = { 373 - name = "cli-spinners"; 374 - packageName = "cli-spinners"; 375 - version = "2.6.1"; 376 - src = fetchurl { 377 - url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz"; 378 - sha512 = "x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="; 379 - }; 380 - }; 381 - "cli-width-3.0.0" = { 382 - name = "cli-width"; 383 - packageName = "cli-width"; 384 - version = "3.0.0"; 385 - src = fetchurl { 386 - url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz"; 387 - sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="; 388 - }; 389 - }; 390 - "clone-1.0.4" = { 391 - name = "clone"; 392 - packageName = "clone"; 393 - version = "1.0.4"; 394 - src = fetchurl { 395 - url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz"; 396 - sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e"; 397 - }; 398 - }; 399 - "color-convert-2.0.1" = { 400 - name = "color-convert"; 401 - packageName = "color-convert"; 402 - version = "2.0.1"; 403 - src = fetchurl { 404 - url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"; 405 - sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="; 406 - }; 407 - }; 408 - "color-name-1.1.4" = { 409 - name = "color-name"; 410 - packageName = "color-name"; 411 - version = "1.1.4"; 412 - src = fetchurl { 413 - url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"; 414 - sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="; 415 - }; 416 - }; 417 - "color-support-1.1.3" = { 418 - name = "color-support"; 419 - packageName = "color-support"; 420 - version = "1.1.3"; 421 - src = fetchurl { 422 - url = "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz"; 423 - sha512 = "qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="; 424 - }; 425 - }; 426 - "concat-map-0.0.1" = { 427 - name = "concat-map"; 428 - packageName = "concat-map"; 429 - version = "0.0.1"; 430 - src = fetchurl { 431 - url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"; 432 - sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b"; 433 - }; 434 - }; 435 - "console-control-strings-1.1.0" = { 436 - name = "console-control-strings"; 437 - packageName = "console-control-strings"; 438 - version = "1.1.0"; 439 - src = fetchurl { 440 - url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"; 441 - sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e"; 442 - }; 443 - }; 444 - "debug-4.3.3" = { 445 - name = "debug"; 446 - packageName = "debug"; 447 - version = "4.3.3"; 448 - src = fetchurl { 449 - url = "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"; 450 - sha512 = "/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q=="; 451 - }; 452 - }; 453 - "defaults-1.0.3" = { 454 - name = "defaults"; 455 - packageName = "defaults"; 456 - version = "1.0.3"; 457 - src = fetchurl { 458 - url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz"; 459 - sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d"; 460 - }; 461 - }; 462 - "define-lazy-prop-2.0.0" = { 463 - name = "define-lazy-prop"; 464 - packageName = "define-lazy-prop"; 465 - version = "2.0.0"; 466 - src = fetchurl { 467 - url = "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"; 468 - sha512 = "Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="; 469 - }; 470 - }; 471 - "delegates-1.0.0" = { 472 - name = "delegates"; 473 - packageName = "delegates"; 474 - version = "1.0.0"; 475 - src = fetchurl { 476 - url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"; 477 - sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a"; 478 - }; 479 - }; 480 - "depd-1.1.2" = { 481 - name = "depd"; 482 - packageName = "depd"; 483 - version = "1.1.2"; 484 - src = fetchurl { 485 - url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"; 486 - sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9"; 487 - }; 488 - }; 489 - "emoji-regex-8.0.0" = { 490 - name = "emoji-regex"; 491 - packageName = "emoji-regex"; 492 - version = "8.0.0"; 493 - src = fetchurl { 494 - url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"; 495 - sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="; 496 - }; 497 - }; 498 - "encoding-0.1.13" = { 499 - name = "encoding"; 500 - packageName = "encoding"; 501 - version = "0.1.13"; 502 - src = fetchurl { 503 - url = "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz"; 504 - sha512 = "ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="; 505 - }; 506 - }; 507 - "env-paths-2.2.1" = { 508 - name = "env-paths"; 509 - packageName = "env-paths"; 510 - version = "2.2.1"; 511 - src = fetchurl { 512 - url = "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz"; 513 - sha512 = "+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="; 514 - }; 515 - }; 516 - "err-code-2.0.3" = { 517 - name = "err-code"; 518 - packageName = "err-code"; 519 - version = "2.0.3"; 520 - src = fetchurl { 521 - url = "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz"; 522 - sha512 = "2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="; 523 - }; 524 - }; 525 - "escape-string-regexp-1.0.5" = { 526 - name = "escape-string-regexp"; 527 - packageName = "escape-string-regexp"; 528 - version = "1.0.5"; 529 - src = fetchurl { 530 - url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"; 531 - sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"; 532 - }; 533 - }; 534 - "external-editor-3.1.0" = { 535 - name = "external-editor"; 536 - packageName = "external-editor"; 537 - version = "3.1.0"; 538 - src = fetchurl { 539 - url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz"; 540 - sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="; 541 - }; 542 - }; 543 - "fast-deep-equal-3.1.3" = { 544 - name = "fast-deep-equal"; 545 - packageName = "fast-deep-equal"; 546 - version = "3.1.3"; 547 - src = fetchurl { 548 - url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"; 549 - sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="; 550 - }; 551 - }; 552 - "fast-json-stable-stringify-2.1.0" = { 553 - name = "fast-json-stable-stringify"; 554 - packageName = "fast-json-stable-stringify"; 555 - version = "2.1.0"; 556 - src = fetchurl { 557 - url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"; 558 - sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="; 559 - }; 560 - }; 561 - "figures-3.2.0" = { 562 - name = "figures"; 563 - packageName = "figures"; 564 - version = "3.2.0"; 565 - src = fetchurl { 566 - url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz"; 567 - sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg=="; 568 - }; 569 - }; 570 - "fs-minipass-2.1.0" = { 571 - name = "fs-minipass"; 572 - packageName = "fs-minipass"; 573 - version = "2.1.0"; 574 - src = fetchurl { 575 - url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"; 576 - sha512 = "V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="; 577 - }; 578 - }; 579 - "fs.realpath-1.0.0" = { 580 - name = "fs.realpath"; 581 - packageName = "fs.realpath"; 582 - version = "1.0.0"; 583 - src = fetchurl { 584 - url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"; 585 - sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f"; 586 - }; 587 - }; 588 - "function-bind-1.1.1" = { 589 - name = "function-bind"; 590 - packageName = "function-bind"; 591 - version = "1.1.1"; 592 - src = fetchurl { 593 - url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"; 594 - sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="; 595 - }; 596 - }; 597 - "gauge-4.0.3" = { 598 - name = "gauge"; 599 - packageName = "gauge"; 600 - version = "4.0.3"; 601 - src = fetchurl { 602 - url = "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz"; 603 - sha512 = "ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw=="; 604 - }; 605 - }; 606 - "glob-7.2.0" = { 607 - name = "glob"; 608 - packageName = "glob"; 609 - version = "7.2.0"; 610 - src = fetchurl { 611 - url = "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"; 612 - sha512 = "lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="; 613 - }; 614 - }; 615 - "graceful-fs-4.2.9" = { 616 - name = "graceful-fs"; 617 - packageName = "graceful-fs"; 618 - version = "4.2.9"; 619 - src = fetchurl { 620 - url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz"; 621 - sha512 = "NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="; 622 - }; 623 - }; 624 - "has-1.0.3" = { 625 - name = "has"; 626 - packageName = "has"; 627 - version = "1.0.3"; 628 - src = fetchurl { 629 - url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz"; 630 - sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="; 631 - }; 632 - }; 633 - "has-flag-4.0.0" = { 634 - name = "has-flag"; 635 - packageName = "has-flag"; 636 - version = "4.0.0"; 637 - src = fetchurl { 638 - url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"; 639 - sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="; 640 - }; 641 - }; 642 - "has-unicode-2.0.1" = { 643 - name = "has-unicode"; 644 - packageName = "has-unicode"; 645 - version = "2.0.1"; 646 - src = fetchurl { 647 - url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"; 648 - sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9"; 649 - }; 650 - }; 651 - "hosted-git-info-4.1.0" = { 652 - name = "hosted-git-info"; 653 - packageName = "hosted-git-info"; 654 - version = "4.1.0"; 655 - src = fetchurl { 656 - url = "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz"; 657 - sha512 = "kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="; 658 - }; 659 - }; 660 - "http-cache-semantics-4.1.0" = { 661 - name = "http-cache-semantics"; 662 - packageName = "http-cache-semantics"; 663 - version = "4.1.0"; 664 - src = fetchurl { 665 - url = "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz"; 666 - sha512 = "carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="; 667 - }; 668 - }; 669 - "http-proxy-agent-4.0.1" = { 670 - name = "http-proxy-agent"; 671 - packageName = "http-proxy-agent"; 672 - version = "4.0.1"; 673 - src = fetchurl { 674 - url = "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz"; 675 - sha512 = "k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg=="; 676 - }; 677 - }; 678 - "http-proxy-agent-5.0.0" = { 679 - name = "http-proxy-agent"; 680 - packageName = "http-proxy-agent"; 681 - version = "5.0.0"; 682 - src = fetchurl { 683 - url = "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz"; 684 - sha512 = "n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w=="; 685 - }; 686 - }; 687 - "https-proxy-agent-5.0.0" = { 688 - name = "https-proxy-agent"; 689 - packageName = "https-proxy-agent"; 690 - version = "5.0.0"; 691 - src = fetchurl { 692 - url = "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz"; 693 - sha512 = "EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA=="; 694 - }; 695 - }; 696 - "humanize-ms-1.2.1" = { 697 - name = "humanize-ms"; 698 - packageName = "humanize-ms"; 699 - version = "1.2.1"; 700 - src = fetchurl { 701 - url = "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz"; 702 - sha1 = "c46e3159a293f6b896da29316d8b6fe8bb79bbed"; 703 - }; 704 - }; 705 - "iconv-lite-0.4.24" = { 706 - name = "iconv-lite"; 707 - packageName = "iconv-lite"; 708 - version = "0.4.24"; 709 - src = fetchurl { 710 - url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"; 711 - sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="; 712 - }; 713 - }; 714 - "iconv-lite-0.6.3" = { 715 - name = "iconv-lite"; 716 - packageName = "iconv-lite"; 717 - version = "0.6.3"; 718 - src = fetchurl { 719 - url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"; 720 - sha512 = "4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="; 721 - }; 722 - }; 723 - "ieee754-1.2.1" = { 724 - name = "ieee754"; 725 - packageName = "ieee754"; 726 - version = "1.2.1"; 727 - src = fetchurl { 728 - url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"; 729 - sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="; 730 - }; 731 - }; 732 - "ignore-walk-4.0.1" = { 733 - name = "ignore-walk"; 734 - packageName = "ignore-walk"; 735 - version = "4.0.1"; 736 - src = fetchurl { 737 - url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz"; 738 - sha512 = "rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw=="; 739 - }; 740 - }; 741 - "imurmurhash-0.1.4" = { 742 - name = "imurmurhash"; 743 - packageName = "imurmurhash"; 744 - version = "0.1.4"; 745 - src = fetchurl { 746 - url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"; 747 - sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea"; 748 - }; 749 - }; 750 - "indent-string-4.0.0" = { 751 - name = "indent-string"; 752 - packageName = "indent-string"; 753 - version = "4.0.0"; 754 - src = fetchurl { 755 - url = "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"; 756 - sha512 = "EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="; 757 - }; 758 - }; 759 - "infer-owner-1.0.4" = { 760 - name = "infer-owner"; 761 - packageName = "infer-owner"; 762 - version = "1.0.4"; 763 - src = fetchurl { 764 - url = "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"; 765 - sha512 = "IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="; 766 - }; 767 - }; 768 - "inflight-1.0.6" = { 769 - name = "inflight"; 770 - packageName = "inflight"; 771 - version = "1.0.6"; 772 - src = fetchurl { 773 - url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"; 774 - sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9"; 775 - }; 776 - }; 777 - "inherits-2.0.4" = { 778 - name = "inherits"; 779 - packageName = "inherits"; 780 - version = "2.0.4"; 781 - src = fetchurl { 782 - url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; 783 - sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; 784 - }; 785 - }; 786 - "ini-2.0.0" = { 787 - name = "ini"; 788 - packageName = "ini"; 789 - version = "2.0.0"; 790 - src = fetchurl { 791 - url = "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz"; 792 - sha512 = "7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="; 793 - }; 794 - }; 795 - "inquirer-8.2.0" = { 796 - name = "inquirer"; 797 - packageName = "inquirer"; 798 - version = "8.2.0"; 799 - src = fetchurl { 800 - url = "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz"; 801 - sha512 = "0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ=="; 802 - }; 803 - }; 804 - "ip-1.1.5" = { 805 - name = "ip"; 806 - packageName = "ip"; 807 - version = "1.1.5"; 808 - src = fetchurl { 809 - url = "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz"; 810 - sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a"; 811 - }; 812 - }; 813 - "is-core-module-2.8.1" = { 814 - name = "is-core-module"; 815 - packageName = "is-core-module"; 816 - version = "2.8.1"; 817 - src = fetchurl { 818 - url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz"; 819 - sha512 = "SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA=="; 820 - }; 821 - }; 822 - "is-docker-2.2.1" = { 823 - name = "is-docker"; 824 - packageName = "is-docker"; 825 - version = "2.2.1"; 826 - src = fetchurl { 827 - url = "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"; 828 - sha512 = "F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="; 829 - }; 830 - }; 831 - "is-fullwidth-code-point-3.0.0" = { 832 - name = "is-fullwidth-code-point"; 833 - packageName = "is-fullwidth-code-point"; 834 - version = "3.0.0"; 835 - src = fetchurl { 836 - url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"; 837 - sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="; 838 - }; 839 - }; 840 - "is-interactive-1.0.0" = { 841 - name = "is-interactive"; 842 - packageName = "is-interactive"; 843 - version = "1.0.0"; 844 - src = fetchurl { 845 - url = "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz"; 846 - sha512 = "2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="; 847 - }; 848 - }; 849 - "is-lambda-1.0.1" = { 850 - name = "is-lambda"; 851 - packageName = "is-lambda"; 852 - version = "1.0.1"; 853 - src = fetchurl { 854 - url = "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz"; 855 - sha1 = "3d9877899e6a53efc0160504cde15f82e6f061d5"; 856 - }; 857 - }; 858 - "is-unicode-supported-0.1.0" = { 859 - name = "is-unicode-supported"; 860 - packageName = "is-unicode-supported"; 861 - version = "0.1.0"; 862 - src = fetchurl { 863 - url = "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"; 864 - sha512 = "knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="; 865 - }; 866 - }; 867 - "is-wsl-2.2.0" = { 868 - name = "is-wsl"; 869 - packageName = "is-wsl"; 870 - version = "2.2.0"; 871 - src = fetchurl { 872 - url = "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"; 873 - sha512 = "fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="; 874 - }; 875 - }; 876 - "isexe-2.0.0" = { 877 - name = "isexe"; 878 - packageName = "isexe"; 879 - version = "2.0.0"; 880 - src = fetchurl { 881 - url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"; 882 - sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10"; 883 - }; 884 - }; 885 - "json-parse-even-better-errors-2.3.1" = { 886 - name = "json-parse-even-better-errors"; 887 - packageName = "json-parse-even-better-errors"; 888 - version = "2.3.1"; 889 - src = fetchurl { 890 - url = "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"; 891 - sha512 = "xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="; 892 - }; 893 - }; 894 - "json-schema-traverse-1.0.0" = { 895 - name = "json-schema-traverse"; 896 - packageName = "json-schema-traverse"; 897 - version = "1.0.0"; 898 - src = fetchurl { 899 - url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"; 900 - sha512 = "NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="; 901 - }; 902 - }; 903 - "jsonc-parser-3.0.0" = { 904 - name = "jsonc-parser"; 905 - packageName = "jsonc-parser"; 906 - version = "3.0.0"; 907 - src = fetchurl { 908 - url = "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz"; 909 - sha512 = "fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA=="; 910 - }; 911 - }; 912 - "jsonparse-1.3.1" = { 913 - name = "jsonparse"; 914 - packageName = "jsonparse"; 915 - version = "1.3.1"; 916 - src = fetchurl { 917 - url = "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz"; 918 - sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280"; 919 - }; 920 - }; 921 - "lodash-4.17.21" = { 922 - name = "lodash"; 923 - packageName = "lodash"; 924 - version = "4.17.21"; 925 - src = fetchurl { 926 - url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"; 927 - sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="; 928 - }; 929 - }; 930 - "log-symbols-4.1.0" = { 931 - name = "log-symbols"; 932 - packageName = "log-symbols"; 933 - version = "4.1.0"; 934 - src = fetchurl { 935 - url = "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz"; 936 - sha512 = "8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="; 937 - }; 938 - }; 939 - "lru-cache-6.0.0" = { 940 - name = "lru-cache"; 941 - packageName = "lru-cache"; 942 - version = "6.0.0"; 943 - src = fetchurl { 944 - url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"; 945 - sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="; 946 - }; 947 - }; 948 - "lru-cache-7.7.1" = { 949 - name = "lru-cache"; 950 - packageName = "lru-cache"; 951 - version = "7.7.1"; 952 - src = fetchurl { 953 - url = "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz"; 954 - sha512 = "cRffBiTW8s73eH4aTXqBcTLU0xQnwGV3/imttRHGWCrbergmnK4D6JXQd8qin5z43HnDwRI+o7mVW0LEB+tpAw=="; 955 - }; 956 - }; 957 - "magic-string-0.25.7" = { 958 - name = "magic-string"; 959 - packageName = "magic-string"; 960 - version = "0.25.7"; 961 - src = fetchurl { 962 - url = "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz"; 963 - sha512 = "4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA=="; 964 - }; 965 - }; 966 - "make-fetch-happen-10.0.6" = { 967 - name = "make-fetch-happen"; 968 - packageName = "make-fetch-happen"; 969 - version = "10.0.6"; 970 - src = fetchurl { 971 - url = "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.0.6.tgz"; 972 - sha512 = "4Gfh6lV3TLXmj7qz79hBFuvVqjYSMW6v2+sxtdX4LFQU0rK3V/txRjE0DoZb7X0IF3t9f8NO3CxPSWlvdckhVA=="; 973 - }; 974 - }; 975 - "make-fetch-happen-9.1.0" = { 976 - name = "make-fetch-happen"; 977 - packageName = "make-fetch-happen"; 978 - version = "9.1.0"; 979 - src = fetchurl { 980 - url = "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz"; 981 - sha512 = "+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg=="; 982 - }; 983 - }; 984 - "mimic-fn-2.1.0" = { 985 - name = "mimic-fn"; 986 - packageName = "mimic-fn"; 987 - version = "2.1.0"; 988 - src = fetchurl { 989 - url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"; 990 - sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="; 991 - }; 992 - }; 993 - "minimatch-3.1.2" = { 994 - name = "minimatch"; 995 - packageName = "minimatch"; 996 - version = "3.1.2"; 997 - src = fetchurl { 998 - url = "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"; 999 - sha512 = "J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="; 1000 - }; 1001 - }; 1002 - "minipass-3.1.6" = { 1003 - name = "minipass"; 1004 - packageName = "minipass"; 1005 - version = "3.1.6"; 1006 - src = fetchurl { 1007 - url = "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz"; 1008 - sha512 = "rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ=="; 1009 - }; 1010 - }; 1011 - "minipass-collect-1.0.2" = { 1012 - name = "minipass-collect"; 1013 - packageName = "minipass-collect"; 1014 - version = "1.0.2"; 1015 - src = fetchurl { 1016 - url = "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz"; 1017 - sha512 = "6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="; 1018 - }; 1019 - }; 1020 - "minipass-fetch-1.4.1" = { 1021 - name = "minipass-fetch"; 1022 - packageName = "minipass-fetch"; 1023 - version = "1.4.1"; 1024 - src = fetchurl { 1025 - url = "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz"; 1026 - sha512 = "CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw=="; 1027 - }; 1028 - }; 1029 - "minipass-fetch-2.0.3" = { 1030 - name = "minipass-fetch"; 1031 - packageName = "minipass-fetch"; 1032 - version = "2.0.3"; 1033 - src = fetchurl { 1034 - url = "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.0.3.tgz"; 1035 - sha512 = "VA+eiiUtaIvpQJXISwE3OiMvQwAWrgKb97F0aXlCS1Ahikr8fEQq8m3Hf7Kv9KT3nokuHigJKsDMB6atU04olQ=="; 1036 - }; 1037 - }; 1038 - "minipass-flush-1.0.5" = { 1039 - name = "minipass-flush"; 1040 - packageName = "minipass-flush"; 1041 - version = "1.0.5"; 1042 - src = fetchurl { 1043 - url = "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz"; 1044 - sha512 = "JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="; 1045 - }; 1046 - }; 1047 - "minipass-json-stream-1.0.1" = { 1048 - name = "minipass-json-stream"; 1049 - packageName = "minipass-json-stream"; 1050 - version = "1.0.1"; 1051 - src = fetchurl { 1052 - url = "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz"; 1053 - sha512 = "ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg=="; 1054 - }; 1055 - }; 1056 - "minipass-pipeline-1.2.4" = { 1057 - name = "minipass-pipeline"; 1058 - packageName = "minipass-pipeline"; 1059 - version = "1.2.4"; 1060 - src = fetchurl { 1061 - url = "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz"; 1062 - sha512 = "xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="; 1063 - }; 1064 - }; 1065 - "minipass-sized-1.0.3" = { 1066 - name = "minipass-sized"; 1067 - packageName = "minipass-sized"; 1068 - version = "1.0.3"; 1069 - src = fetchurl { 1070 - url = "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz"; 1071 - sha512 = "MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="; 1072 - }; 1073 - }; 1074 - "minizlib-2.1.2" = { 1075 - name = "minizlib"; 1076 - packageName = "minizlib"; 1077 - version = "2.1.2"; 1078 - src = fetchurl { 1079 - url = "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"; 1080 - sha512 = "bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="; 1081 - }; 1082 - }; 1083 - "mkdirp-1.0.4" = { 1084 - name = "mkdirp"; 1085 - packageName = "mkdirp"; 1086 - version = "1.0.4"; 1087 - src = fetchurl { 1088 - url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"; 1089 - sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="; 1090 - }; 1091 - }; 1092 - "ms-2.1.2" = { 1093 - name = "ms"; 1094 - packageName = "ms"; 1095 - version = "2.1.2"; 1096 - src = fetchurl { 1097 - url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"; 1098 - sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="; 1099 - }; 1100 - }; 1101 - "mute-stream-0.0.8" = { 1102 - name = "mute-stream"; 1103 - packageName = "mute-stream"; 1104 - version = "0.0.8"; 1105 - src = fetchurl { 1106 - url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"; 1107 - sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="; 1108 - }; 1109 - }; 1110 - "negotiator-0.6.3" = { 1111 - name = "negotiator"; 1112 - packageName = "negotiator"; 1113 - version = "0.6.3"; 1114 - src = fetchurl { 1115 - url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"; 1116 - sha512 = "+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="; 1117 - }; 1118 - }; 1119 - "node-gyp-8.4.1" = { 1120 - name = "node-gyp"; 1121 - packageName = "node-gyp"; 1122 - version = "8.4.1"; 1123 - src = fetchurl { 1124 - url = "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz"; 1125 - sha512 = "olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w=="; 1126 - }; 1127 - }; 1128 - "nopt-5.0.0" = { 1129 - name = "nopt"; 1130 - packageName = "nopt"; 1131 - version = "5.0.0"; 1132 - src = fetchurl { 1133 - url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"; 1134 - sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="; 1135 - }; 1136 - }; 1137 - "npm-bundled-1.1.2" = { 1138 - name = "npm-bundled"; 1139 - packageName = "npm-bundled"; 1140 - version = "1.1.2"; 1141 - src = fetchurl { 1142 - url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz"; 1143 - sha512 = "x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ=="; 1144 - }; 1145 - }; 1146 - "npm-install-checks-4.0.0" = { 1147 - name = "npm-install-checks"; 1148 - packageName = "npm-install-checks"; 1149 - version = "4.0.0"; 1150 - src = fetchurl { 1151 - url = "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz"; 1152 - sha512 = "09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w=="; 1153 - }; 1154 - }; 1155 - "npm-normalize-package-bin-1.0.1" = { 1156 - name = "npm-normalize-package-bin"; 1157 - packageName = "npm-normalize-package-bin"; 1158 - version = "1.0.1"; 1159 - src = fetchurl { 1160 - url = "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz"; 1161 - sha512 = "EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="; 1162 - }; 1163 - }; 1164 - "npm-package-arg-8.1.5" = { 1165 - name = "npm-package-arg"; 1166 - packageName = "npm-package-arg"; 1167 - version = "8.1.5"; 1168 - src = fetchurl { 1169 - url = "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz"; 1170 - sha512 = "LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q=="; 1171 - }; 1172 - }; 1173 - "npm-packlist-3.0.0" = { 1174 - name = "npm-packlist"; 1175 - packageName = "npm-packlist"; 1176 - version = "3.0.0"; 1177 - src = fetchurl { 1178 - url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz"; 1179 - sha512 = "L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ=="; 1180 - }; 1181 - }; 1182 - "npm-pick-manifest-6.1.1" = { 1183 - name = "npm-pick-manifest"; 1184 - packageName = "npm-pick-manifest"; 1185 - version = "6.1.1"; 1186 - src = fetchurl { 1187 - url = "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz"; 1188 - sha512 = "dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA=="; 1189 - }; 1190 - }; 1191 - "npm-registry-fetch-12.0.2" = { 1192 - name = "npm-registry-fetch"; 1193 - packageName = "npm-registry-fetch"; 1194 - version = "12.0.2"; 1195 - src = fetchurl { 1196 - url = "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz"; 1197 - sha512 = "Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA=="; 1198 - }; 1199 - }; 1200 - "npmlog-6.0.1" = { 1201 - name = "npmlog"; 1202 - packageName = "npmlog"; 1203 - version = "6.0.1"; 1204 - src = fetchurl { 1205 - url = "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz"; 1206 - sha512 = "BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg=="; 1207 - }; 1208 - }; 1209 - "once-1.4.0" = { 1210 - name = "once"; 1211 - packageName = "once"; 1212 - version = "1.4.0"; 1213 - src = fetchurl { 1214 - url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz"; 1215 - sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1"; 1216 - }; 1217 - }; 1218 - "onetime-5.1.2" = { 1219 - name = "onetime"; 1220 - packageName = "onetime"; 1221 - version = "5.1.2"; 1222 - src = fetchurl { 1223 - url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"; 1224 - sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="; 1225 - }; 1226 - }; 1227 - "open-8.4.0" = { 1228 - name = "open"; 1229 - packageName = "open"; 1230 - version = "8.4.0"; 1231 - src = fetchurl { 1232 - url = "https://registry.npmjs.org/open/-/open-8.4.0.tgz"; 1233 - sha512 = "XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q=="; 1234 - }; 1235 - }; 1236 - "ora-5.4.1" = { 1237 - name = "ora"; 1238 - packageName = "ora"; 1239 - version = "5.4.1"; 1240 - src = fetchurl { 1241 - url = "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz"; 1242 - sha512 = "5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="; 1243 - }; 1244 - }; 1245 - "os-tmpdir-1.0.2" = { 1246 - name = "os-tmpdir"; 1247 - packageName = "os-tmpdir"; 1248 - version = "1.0.2"; 1249 - src = fetchurl { 1250 - url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"; 1251 - sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274"; 1252 - }; 1253 - }; 1254 - "p-map-4.0.0" = { 1255 - name = "p-map"; 1256 - packageName = "p-map"; 1257 - version = "4.0.0"; 1258 - src = fetchurl { 1259 - url = "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz"; 1260 - sha512 = "/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="; 1261 - }; 1262 - }; 1263 - "pacote-12.0.3" = { 1264 - name = "pacote"; 1265 - packageName = "pacote"; 1266 - version = "12.0.3"; 1267 - src = fetchurl { 1268 - url = "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz"; 1269 - sha512 = "CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow=="; 1270 - }; 1271 - }; 1272 - "path-is-absolute-1.0.1" = { 1273 - name = "path-is-absolute"; 1274 - packageName = "path-is-absolute"; 1275 - version = "1.0.1"; 1276 - src = fetchurl { 1277 - url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"; 1278 - sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"; 1279 - }; 1280 - }; 1281 - "path-parse-1.0.7" = { 1282 - name = "path-parse"; 1283 - packageName = "path-parse"; 1284 - version = "1.0.7"; 1285 - src = fetchurl { 1286 - url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"; 1287 - sha512 = "LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="; 1288 - }; 1289 - }; 1290 - "promise-inflight-1.0.1" = { 1291 - name = "promise-inflight"; 1292 - packageName = "promise-inflight"; 1293 - version = "1.0.1"; 1294 - src = fetchurl { 1295 - url = "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz"; 1296 - sha1 = "98472870bf228132fcbdd868129bad12c3c029e3"; 1297 - }; 1298 - }; 1299 - "promise-retry-2.0.1" = { 1300 - name = "promise-retry"; 1301 - packageName = "promise-retry"; 1302 - version = "2.0.1"; 1303 - src = fetchurl { 1304 - url = "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz"; 1305 - sha512 = "y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="; 1306 - }; 1307 - }; 1308 - "punycode-2.1.1" = { 1309 - name = "punycode"; 1310 - packageName = "punycode"; 1311 - version = "2.1.1"; 1312 - src = fetchurl { 1313 - url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"; 1314 - sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="; 1315 - }; 1316 - }; 1317 - "read-package-json-fast-2.0.3" = { 1318 - name = "read-package-json-fast"; 1319 - packageName = "read-package-json-fast"; 1320 - version = "2.0.3"; 1321 - src = fetchurl { 1322 - url = "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz"; 1323 - sha512 = "W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ=="; 1324 - }; 1325 - }; 1326 - "readable-stream-3.6.0" = { 1327 - name = "readable-stream"; 1328 - packageName = "readable-stream"; 1329 - version = "3.6.0"; 1330 - src = fetchurl { 1331 - url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"; 1332 - sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="; 1333 - }; 1334 - }; 1335 - "require-from-string-2.0.2" = { 1336 - name = "require-from-string"; 1337 - packageName = "require-from-string"; 1338 - version = "2.0.2"; 1339 - src = fetchurl { 1340 - url = "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"; 1341 - sha512 = "Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="; 1342 - }; 1343 - }; 1344 - "resolve-1.22.0" = { 1345 - name = "resolve"; 1346 - packageName = "resolve"; 1347 - version = "1.22.0"; 1348 - src = fetchurl { 1349 - url = "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz"; 1350 - sha512 = "Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw=="; 1351 - }; 1352 - }; 1353 - "restore-cursor-3.1.0" = { 1354 - name = "restore-cursor"; 1355 - packageName = "restore-cursor"; 1356 - version = "3.1.0"; 1357 - src = fetchurl { 1358 - url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz"; 1359 - sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="; 1360 - }; 1361 - }; 1362 - "retry-0.12.0" = { 1363 - name = "retry"; 1364 - packageName = "retry"; 1365 - version = "0.12.0"; 1366 - src = fetchurl { 1367 - url = "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz"; 1368 - sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b"; 1369 - }; 1370 - }; 1371 - "rimraf-3.0.2" = { 1372 - name = "rimraf"; 1373 - packageName = "rimraf"; 1374 - version = "3.0.2"; 1375 - src = fetchurl { 1376 - url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"; 1377 - sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="; 1378 - }; 1379 - }; 1380 - "run-async-2.4.1" = { 1381 - name = "run-async"; 1382 - packageName = "run-async"; 1383 - version = "2.4.1"; 1384 - src = fetchurl { 1385 - url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz"; 1386 - sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="; 1387 - }; 1388 - }; 1389 - "rxjs-6.6.7" = { 1390 - name = "rxjs"; 1391 - packageName = "rxjs"; 1392 - version = "6.6.7"; 1393 - src = fetchurl { 1394 - url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz"; 1395 - sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ=="; 1396 - }; 1397 - }; 1398 - "rxjs-7.5.5" = { 1399 - name = "rxjs"; 1400 - packageName = "rxjs"; 1401 - version = "7.5.5"; 1402 - src = fetchurl { 1403 - url = "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz"; 1404 - sha512 = "sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw=="; 1405 - }; 1406 - }; 1407 - "safe-buffer-5.2.1" = { 1408 - name = "safe-buffer"; 1409 - packageName = "safe-buffer"; 1410 - version = "5.2.1"; 1411 - src = fetchurl { 1412 - url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"; 1413 - sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="; 1414 - }; 1415 - }; 1416 - "safer-buffer-2.1.2" = { 1417 - name = "safer-buffer"; 1418 - packageName = "safer-buffer"; 1419 - version = "2.1.2"; 1420 - src = fetchurl { 1421 - url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; 1422 - sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; 1423 - }; 1424 - }; 1425 - "semver-7.3.5" = { 1426 - name = "semver"; 1427 - packageName = "semver"; 1428 - version = "7.3.5"; 1429 - src = fetchurl { 1430 - url = "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"; 1431 - sha512 = "PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="; 1432 - }; 1433 - }; 1434 - "set-blocking-2.0.0" = { 1435 - name = "set-blocking"; 1436 - packageName = "set-blocking"; 1437 - version = "2.0.0"; 1438 - src = fetchurl { 1439 - url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"; 1440 - sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7"; 1441 - }; 1442 - }; 1443 - "signal-exit-3.0.7" = { 1444 - name = "signal-exit"; 1445 - packageName = "signal-exit"; 1446 - version = "3.0.7"; 1447 - src = fetchurl { 1448 - url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"; 1449 - sha512 = "wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="; 1450 - }; 1451 - }; 1452 - "smart-buffer-4.2.0" = { 1453 - name = "smart-buffer"; 1454 - packageName = "smart-buffer"; 1455 - version = "4.2.0"; 1456 - src = fetchurl { 1457 - url = "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"; 1458 - sha512 = "94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="; 1459 - }; 1460 - }; 1461 - "socks-2.6.2" = { 1462 - name = "socks"; 1463 - packageName = "socks"; 1464 - version = "2.6.2"; 1465 - src = fetchurl { 1466 - url = "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz"; 1467 - sha512 = "zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA=="; 1468 - }; 1469 - }; 1470 - "socks-proxy-agent-6.1.1" = { 1471 - name = "socks-proxy-agent"; 1472 - packageName = "socks-proxy-agent"; 1473 - version = "6.1.1"; 1474 - src = fetchurl { 1475 - url = "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz"; 1476 - sha512 = "t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew=="; 1477 - }; 1478 - }; 1479 - "source-map-0.7.3" = { 1480 - name = "source-map"; 1481 - packageName = "source-map"; 1482 - version = "0.7.3"; 1483 - src = fetchurl { 1484 - url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz"; 1485 - sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="; 1486 - }; 1487 - }; 1488 - "sourcemap-codec-1.4.8" = { 1489 - name = "sourcemap-codec"; 1490 - packageName = "sourcemap-codec"; 1491 - version = "1.4.8"; 1492 - src = fetchurl { 1493 - url = "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"; 1494 - sha512 = "9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="; 1495 - }; 1496 - }; 1497 - "ssri-8.0.1" = { 1498 - name = "ssri"; 1499 - packageName = "ssri"; 1500 - version = "8.0.1"; 1501 - src = fetchurl { 1502 - url = "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz"; 1503 - sha512 = "97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ=="; 1504 - }; 1505 - }; 1506 - "string-width-4.2.3" = { 1507 - name = "string-width"; 1508 - packageName = "string-width"; 1509 - version = "4.2.3"; 1510 - src = fetchurl { 1511 - url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"; 1512 - sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="; 1513 - }; 1514 - }; 1515 - "string_decoder-1.3.0" = { 1516 - name = "string_decoder"; 1517 - packageName = "string_decoder"; 1518 - version = "1.3.0"; 1519 - src = fetchurl { 1520 - url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"; 1521 - sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="; 1522 - }; 1523 - }; 1524 - "strip-ansi-6.0.1" = { 1525 - name = "strip-ansi"; 1526 - packageName = "strip-ansi"; 1527 - version = "6.0.1"; 1528 - src = fetchurl { 1529 - url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"; 1530 - sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="; 1531 - }; 1532 - }; 1533 - "supports-color-7.2.0" = { 1534 - name = "supports-color"; 1535 - packageName = "supports-color"; 1536 - version = "7.2.0"; 1537 - src = fetchurl { 1538 - url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"; 1539 - sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="; 1540 - }; 1541 - }; 1542 - "supports-preserve-symlinks-flag-1.0.0" = { 1543 - name = "supports-preserve-symlinks-flag"; 1544 - packageName = "supports-preserve-symlinks-flag"; 1545 - version = "1.0.0"; 1546 - src = fetchurl { 1547 - url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"; 1548 - sha512 = "ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="; 1549 - }; 1550 - }; 1551 - "symbol-observable-4.0.0" = { 1552 - name = "symbol-observable"; 1553 - packageName = "symbol-observable"; 1554 - version = "4.0.0"; 1555 - src = fetchurl { 1556 - url = "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz"; 1557 - sha512 = "b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ=="; 1558 - }; 1559 - }; 1560 - "tar-6.1.11" = { 1561 - name = "tar"; 1562 - packageName = "tar"; 1563 - version = "6.1.11"; 1564 - src = fetchurl { 1565 - url = "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz"; 1566 - sha512 = "an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA=="; 1567 - }; 1568 - }; 1569 - "through-2.3.8" = { 1570 - name = "through"; 1571 - packageName = "through"; 1572 - version = "2.3.8"; 1573 - src = fetchurl { 1574 - url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz"; 1575 - sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"; 1576 - }; 1577 - }; 1578 - "tmp-0.0.33" = { 1579 - name = "tmp"; 1580 - packageName = "tmp"; 1581 - version = "0.0.33"; 1582 - src = fetchurl { 1583 - url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz"; 1584 - sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="; 1585 - }; 1586 - }; 1587 - "tslib-1.14.1" = { 1588 - name = "tslib"; 1589 - packageName = "tslib"; 1590 - version = "1.14.1"; 1591 - src = fetchurl { 1592 - url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"; 1593 - sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="; 1594 - }; 1595 - }; 1596 - "tslib-2.3.1" = { 1597 - name = "tslib"; 1598 - packageName = "tslib"; 1599 - version = "2.3.1"; 1600 - src = fetchurl { 1601 - url = "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz"; 1602 - sha512 = "77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="; 1603 - }; 1604 - }; 1605 - "type-fest-0.21.3" = { 1606 - name = "type-fest"; 1607 - packageName = "type-fest"; 1608 - version = "0.21.3"; 1609 - src = fetchurl { 1610 - url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"; 1611 - sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="; 1612 - }; 1613 - }; 1614 - "unique-filename-1.1.1" = { 1615 - name = "unique-filename"; 1616 - packageName = "unique-filename"; 1617 - version = "1.1.1"; 1618 - src = fetchurl { 1619 - url = "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz"; 1620 - sha512 = "Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ=="; 1621 - }; 1622 - }; 1623 - "unique-slug-2.0.2" = { 1624 - name = "unique-slug"; 1625 - packageName = "unique-slug"; 1626 - version = "2.0.2"; 1627 - src = fetchurl { 1628 - url = "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz"; 1629 - sha512 = "zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w=="; 1630 - }; 1631 - }; 1632 - "uri-js-4.4.1" = { 1633 - name = "uri-js"; 1634 - packageName = "uri-js"; 1635 - version = "4.4.1"; 1636 - src = fetchurl { 1637 - url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"; 1638 - sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="; 1639 - }; 1640 - }; 1641 - "util-deprecate-1.0.2" = { 1642 - name = "util-deprecate"; 1643 - packageName = "util-deprecate"; 1644 - version = "1.0.2"; 1645 - src = fetchurl { 1646 - url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; 1647 - sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf"; 1648 - }; 1649 - }; 1650 - "uuid-8.3.2" = { 1651 - name = "uuid"; 1652 - packageName = "uuid"; 1653 - version = "8.3.2"; 1654 - src = fetchurl { 1655 - url = "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"; 1656 - sha512 = "+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="; 1657 - }; 1658 - }; 1659 - "validate-npm-package-name-3.0.0" = { 1660 - name = "validate-npm-package-name"; 1661 - packageName = "validate-npm-package-name"; 1662 - version = "3.0.0"; 1663 - src = fetchurl { 1664 - url = "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz"; 1665 - sha1 = "5fa912d81eb7d0c74afc140de7317f0ca7df437e"; 1666 - }; 1667 - }; 1668 - "wcwidth-1.0.1" = { 1669 - name = "wcwidth"; 1670 - packageName = "wcwidth"; 1671 - version = "1.0.1"; 1672 - src = fetchurl { 1673 - url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz"; 1674 - sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"; 1675 - }; 1676 - }; 1677 - "which-2.0.2" = { 1678 - name = "which"; 1679 - packageName = "which"; 1680 - version = "2.0.2"; 1681 - src = fetchurl { 1682 - url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz"; 1683 - sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="; 1684 - }; 1685 - }; 1686 - "wide-align-1.1.5" = { 1687 - name = "wide-align"; 1688 - packageName = "wide-align"; 1689 - version = "1.1.5"; 1690 - src = fetchurl { 1691 - url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz"; 1692 - sha512 = "eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="; 1693 - }; 1694 - }; 1695 - "wrappy-1.0.2" = { 1696 - name = "wrappy"; 1697 - packageName = "wrappy"; 1698 - version = "1.0.2"; 1699 - src = fetchurl { 1700 - url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"; 1701 - sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"; 1702 - }; 1703 - }; 1704 - "yallist-4.0.0" = { 1705 - name = "yallist"; 1706 - packageName = "yallist"; 1707 - version = "4.0.0"; 1708 - src = fetchurl { 1709 - url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"; 1710 - sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="; 1711 - }; 1712 - }; 1713 - }; 1714 - in { 1715 - "@angular/cli" = nodeEnv.buildNodePackage { 1716 - name = "_at_angular_slash_cli"; 1717 - packageName = "@angular/cli"; 1718 - version = "13.3.0"; 1719 - src = fetchurl { 1720 - url = "https://registry.npmjs.org/@angular/cli/-/cli-13.3.0.tgz"; 1721 - sha512 = "2qCKP/QsyxrJnpd3g4P/iTQ4TjI04N8r+bG5YLLfudoMDsQ/Ti4ogdI7PBeG2IMbRylZW9XLjHraWG42+Y9tWw=="; 1722 - }; 1723 - dependencies = [ 1724 - sources."@angular-devkit/architect-0.1303.0" 1725 - sources."@angular-devkit/core-13.3.0" 1726 - sources."@angular-devkit/schematics-13.3.0" 1727 - sources."@gar/promisify-1.1.3" 1728 - sources."@npmcli/fs-1.1.1" 1729 - sources."@npmcli/git-2.1.0" 1730 - sources."@npmcli/installed-package-contents-1.0.7" 1731 - sources."@npmcli/move-file-1.1.2" 1732 - sources."@npmcli/node-gyp-1.0.3" 1733 - sources."@npmcli/promise-spawn-1.3.2" 1734 - sources."@npmcli/run-script-2.0.0" 1735 - sources."@schematics/angular-13.3.0" 1736 - sources."@tootallnate/once-1.1.2" 1737 - sources."@yarnpkg/lockfile-1.1.0" 1738 - sources."abbrev-1.1.1" 1739 - sources."agent-base-6.0.2" 1740 - sources."agentkeepalive-4.2.1" 1741 - sources."aggregate-error-3.1.0" 1742 - sources."ajv-8.9.0" 1743 - sources."ajv-formats-2.1.1" 1744 - sources."ansi-colors-4.1.1" 1745 - sources."ansi-escapes-4.3.2" 1746 - sources."ansi-regex-5.0.1" 1747 - sources."ansi-styles-4.3.0" 1748 - sources."aproba-2.0.0" 1749 - sources."are-we-there-yet-3.0.0" 1750 - sources."balanced-match-1.0.2" 1751 - sources."base64-js-1.5.1" 1752 - sources."bl-4.1.0" 1753 - sources."brace-expansion-1.1.11" 1754 - sources."buffer-5.7.1" 1755 - sources."builtins-1.0.3" 1756 - sources."cacache-15.3.0" 1757 - sources."chalk-4.1.2" 1758 - sources."chardet-0.7.0" 1759 - sources."chownr-2.0.0" 1760 - sources."clean-stack-2.2.0" 1761 - sources."cli-cursor-3.1.0" 1762 - sources."cli-spinners-2.6.1" 1763 - sources."cli-width-3.0.0" 1764 - sources."clone-1.0.4" 1765 - sources."color-convert-2.0.1" 1766 - sources."color-name-1.1.4" 1767 - sources."color-support-1.1.3" 1768 - sources."concat-map-0.0.1" 1769 - sources."console-control-strings-1.1.0" 1770 - sources."debug-4.3.3" 1771 - sources."defaults-1.0.3" 1772 - sources."define-lazy-prop-2.0.0" 1773 - sources."delegates-1.0.0" 1774 - sources."depd-1.1.2" 1775 - sources."emoji-regex-8.0.0" 1776 - (sources."encoding-0.1.13" 1777 - // { 1778 - dependencies = [ 1779 - sources."iconv-lite-0.6.3" 1780 - ]; 1781 - }) 1782 - sources."env-paths-2.2.1" 1783 - sources."err-code-2.0.3" 1784 - sources."escape-string-regexp-1.0.5" 1785 - sources."external-editor-3.1.0" 1786 - sources."fast-deep-equal-3.1.3" 1787 - sources."fast-json-stable-stringify-2.1.0" 1788 - sources."figures-3.2.0" 1789 - sources."fs-minipass-2.1.0" 1790 - sources."fs.realpath-1.0.0" 1791 - sources."function-bind-1.1.1" 1792 - sources."gauge-4.0.3" 1793 - sources."glob-7.2.0" 1794 - sources."graceful-fs-4.2.9" 1795 - sources."has-1.0.3" 1796 - sources."has-flag-4.0.0" 1797 - sources."has-unicode-2.0.1" 1798 - sources."hosted-git-info-4.1.0" 1799 - sources."http-cache-semantics-4.1.0" 1800 - sources."http-proxy-agent-4.0.1" 1801 - sources."https-proxy-agent-5.0.0" 1802 - sources."humanize-ms-1.2.1" 1803 - sources."iconv-lite-0.4.24" 1804 - sources."ieee754-1.2.1" 1805 - sources."ignore-walk-4.0.1" 1806 - sources."imurmurhash-0.1.4" 1807 - sources."indent-string-4.0.0" 1808 - sources."infer-owner-1.0.4" 1809 - sources."inflight-1.0.6" 1810 - sources."inherits-2.0.4" 1811 - sources."ini-2.0.0" 1812 - (sources."inquirer-8.2.0" 1813 - // { 1814 - dependencies = [ 1815 - sources."rxjs-7.5.5" 1816 - sources."tslib-2.3.1" 1817 - ]; 1818 - }) 1819 - sources."ip-1.1.5" 1820 - sources."is-core-module-2.8.1" 1821 - sources."is-docker-2.2.1" 1822 - sources."is-fullwidth-code-point-3.0.0" 1823 - sources."is-interactive-1.0.0" 1824 - sources."is-lambda-1.0.1" 1825 - sources."is-unicode-supported-0.1.0" 1826 - sources."is-wsl-2.2.0" 1827 - sources."isexe-2.0.0" 1828 - sources."json-parse-even-better-errors-2.3.1" 1829 - sources."json-schema-traverse-1.0.0" 1830 - sources."jsonc-parser-3.0.0" 1831 - sources."jsonparse-1.3.1" 1832 - sources."lodash-4.17.21" 1833 - sources."log-symbols-4.1.0" 1834 - sources."lru-cache-6.0.0" 1835 - sources."magic-string-0.25.7" 1836 - sources."make-fetch-happen-9.1.0" 1837 - sources."mimic-fn-2.1.0" 1838 - sources."minimatch-3.1.2" 1839 - sources."minipass-3.1.6" 1840 - sources."minipass-collect-1.0.2" 1841 - sources."minipass-fetch-1.4.1" 1842 - sources."minipass-flush-1.0.5" 1843 - sources."minipass-json-stream-1.0.1" 1844 - sources."minipass-pipeline-1.2.4" 1845 - sources."minipass-sized-1.0.3" 1846 - sources."minizlib-2.1.2" 1847 - sources."mkdirp-1.0.4" 1848 - sources."ms-2.1.2" 1849 - sources."mute-stream-0.0.8" 1850 - sources."negotiator-0.6.3" 1851 - sources."node-gyp-8.4.1" 1852 - sources."nopt-5.0.0" 1853 - sources."npm-bundled-1.1.2" 1854 - sources."npm-install-checks-4.0.0" 1855 - sources."npm-normalize-package-bin-1.0.1" 1856 - sources."npm-package-arg-8.1.5" 1857 - sources."npm-packlist-3.0.0" 1858 - sources."npm-pick-manifest-6.1.1" 1859 - (sources."npm-registry-fetch-12.0.2" 1860 - // { 1861 - dependencies = [ 1862 - sources."@tootallnate/once-2.0.0" 1863 - sources."cacache-16.0.2" 1864 - sources."http-proxy-agent-5.0.0" 1865 - sources."lru-cache-7.7.1" 1866 - (sources."make-fetch-happen-10.0.6" 1867 - // { 1868 - dependencies = [ 1869 - sources."minipass-fetch-2.0.3" 1870 - ]; 1871 - }) 1872 - ]; 1873 - }) 1874 - sources."npmlog-6.0.1" 1875 - sources."once-1.4.0" 1876 - sources."onetime-5.1.2" 1877 - sources."open-8.4.0" 1878 - sources."ora-5.4.1" 1879 - sources."os-tmpdir-1.0.2" 1880 - sources."p-map-4.0.0" 1881 - sources."pacote-12.0.3" 1882 - sources."path-is-absolute-1.0.1" 1883 - sources."path-parse-1.0.7" 1884 - sources."promise-inflight-1.0.1" 1885 - sources."promise-retry-2.0.1" 1886 - sources."punycode-2.1.1" 1887 - sources."read-package-json-fast-2.0.3" 1888 - sources."readable-stream-3.6.0" 1889 - sources."require-from-string-2.0.2" 1890 - sources."resolve-1.22.0" 1891 - sources."restore-cursor-3.1.0" 1892 - sources."retry-0.12.0" 1893 - sources."rimraf-3.0.2" 1894 - sources."run-async-2.4.1" 1895 - sources."rxjs-6.6.7" 1896 - sources."safe-buffer-5.2.1" 1897 - sources."safer-buffer-2.1.2" 1898 - sources."semver-7.3.5" 1899 - sources."set-blocking-2.0.0" 1900 - sources."signal-exit-3.0.7" 1901 - sources."smart-buffer-4.2.0" 1902 - sources."socks-2.6.2" 1903 - sources."socks-proxy-agent-6.1.1" 1904 - sources."source-map-0.7.3" 1905 - sources."sourcemap-codec-1.4.8" 1906 - sources."ssri-8.0.1" 1907 - sources."string-width-4.2.3" 1908 - sources."string_decoder-1.3.0" 1909 - sources."strip-ansi-6.0.1" 1910 - sources."supports-color-7.2.0" 1911 - sources."supports-preserve-symlinks-flag-1.0.0" 1912 - sources."symbol-observable-4.0.0" 1913 - sources."tar-6.1.11" 1914 - sources."through-2.3.8" 1915 - sources."tmp-0.0.33" 1916 - sources."tslib-1.14.1" 1917 - sources."type-fest-0.21.3" 1918 - sources."unique-filename-1.1.1" 1919 - sources."unique-slug-2.0.2" 1920 - sources."uri-js-4.4.1" 1921 - sources."util-deprecate-1.0.2" 1922 - sources."uuid-8.3.2" 1923 - sources."validate-npm-package-name-3.0.0" 1924 - sources."wcwidth-1.0.1" 1925 - sources."which-2.0.2" 1926 - sources."wide-align-1.1.5" 1927 - sources."wrappy-1.0.2" 1928 - sources."yallist-4.0.0" 1929 - ]; 1930 - buildInputs = globalBuildInputs; 1931 - meta = { 1932 - description = "CLI tool for Angular"; 1933 - homepage = "https://github.com/angular/angular-cli"; 1934 - license = "MIT"; 1935 - }; 1936 - production = true; 1937 - bypassCache = true; 1938 - reconstructLock = true; 1939 - }; 1940 - }
-14
packages/nodePackages/override.nix
··· 1 - { 2 - pkgs, 3 - system, 4 - }: let 5 - nodePackages = import ./default.nix { 6 - inherit pkgs system; 7 - }; 8 - in 9 - nodePackages 10 - // { 11 - "@angular/cli" = nodePackages."@angular/cli".overrideAttrs (_: { 12 - NG_CLI_ANALYTICS = false; 13 - }); 14 - }
+3 -2
packages/rofi-unicode/default.nix
··· 5 5 }: let 6 6 source = builtins.fromJSON (builtins.readFile ./rofi-unicode.json); 7 7 in 8 - stdenvNoCC.mkDerivation rec { 8 + stdenvNoCC.mkDerivation (self: { 9 9 pname = "rofiemoji-rofiunicode"; 10 10 version = "${source.rev}"; 11 + strictDeps = true; 11 12 12 13 src = fetchgit { 13 14 inherit (source) rev url sha256; ··· 28 29 --replace 'xsel' '${xsel}/bin/xsel' 29 30 done; 30 31 ''; 31 - } 32 + })
-1
packages/switcher/.gitignore
··· 1 - target
-590
packages/switcher/Cargo.lock
··· 1 - # This file is automatically @generated by Cargo. 2 - # It is not intended for manual editing. 3 - version = 3 4 - 5 - [[package]] 6 - name = "ansi_term" 7 - version = "0.12.1" 8 - source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 10 - dependencies = [ 11 - "winapi", 12 - ] 13 - 14 - [[package]] 15 - name = "autocfg" 16 - version = "1.1.0" 17 - source = "registry+https://github.com/rust-lang/crates.io-index" 18 - checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 19 - 20 - [[package]] 21 - name = "bitflags" 22 - version = "1.3.2" 23 - source = "registry+https://github.com/rust-lang/crates.io-index" 24 - checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 25 - 26 - [[package]] 27 - name = "bytes" 28 - version = "1.1.0" 29 - source = "registry+https://github.com/rust-lang/crates.io-index" 30 - checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" 31 - 32 - [[package]] 33 - name = "cfg-if" 34 - version = "1.0.0" 35 - source = "registry+https://github.com/rust-lang/crates.io-index" 36 - checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 37 - 38 - [[package]] 39 - name = "futures" 40 - version = "0.3.21" 41 - source = "registry+https://github.com/rust-lang/crates.io-index" 42 - checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" 43 - dependencies = [ 44 - "futures-channel", 45 - "futures-core", 46 - "futures-executor", 47 - "futures-io", 48 - "futures-sink", 49 - "futures-task", 50 - "futures-util", 51 - ] 52 - 53 - [[package]] 54 - name = "futures-channel" 55 - version = "0.3.21" 56 - source = "registry+https://github.com/rust-lang/crates.io-index" 57 - checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 58 - dependencies = [ 59 - "futures-core", 60 - "futures-sink", 61 - ] 62 - 63 - [[package]] 64 - name = "futures-core" 65 - version = "0.3.21" 66 - source = "registry+https://github.com/rust-lang/crates.io-index" 67 - checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 68 - 69 - [[package]] 70 - name = "futures-executor" 71 - version = "0.3.21" 72 - source = "registry+https://github.com/rust-lang/crates.io-index" 73 - checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" 74 - dependencies = [ 75 - "futures-core", 76 - "futures-task", 77 - "futures-util", 78 - ] 79 - 80 - [[package]] 81 - name = "futures-io" 82 - version = "0.3.21" 83 - source = "registry+https://github.com/rust-lang/crates.io-index" 84 - checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" 85 - 86 - [[package]] 87 - name = "futures-macro" 88 - version = "0.3.21" 89 - source = "registry+https://github.com/rust-lang/crates.io-index" 90 - checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" 91 - dependencies = [ 92 - "proc-macro2", 93 - "quote", 94 - "syn", 95 - ] 96 - 97 - [[package]] 98 - name = "futures-sink" 99 - version = "0.3.21" 100 - source = "registry+https://github.com/rust-lang/crates.io-index" 101 - checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 102 - 103 - [[package]] 104 - name = "futures-task" 105 - version = "0.3.21" 106 - source = "registry+https://github.com/rust-lang/crates.io-index" 107 - checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 108 - 109 - [[package]] 110 - name = "futures-util" 111 - version = "0.3.21" 112 - source = "registry+https://github.com/rust-lang/crates.io-index" 113 - checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 114 - dependencies = [ 115 - "futures-channel", 116 - "futures-core", 117 - "futures-io", 118 - "futures-macro", 119 - "futures-sink", 120 - "futures-task", 121 - "memchr", 122 - "pin-project-lite", 123 - "pin-utils", 124 - "slab", 125 - ] 126 - 127 - [[package]] 128 - name = "hermit-abi" 129 - version = "0.1.19" 130 - source = "registry+https://github.com/rust-lang/crates.io-index" 131 - checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 132 - dependencies = [ 133 - "libc", 134 - ] 135 - 136 - [[package]] 137 - name = "itoa" 138 - version = "1.0.1" 139 - source = "registry+https://github.com/rust-lang/crates.io-index" 140 - checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 141 - 142 - [[package]] 143 - name = "lazy_static" 144 - version = "1.4.0" 145 - source = "registry+https://github.com/rust-lang/crates.io-index" 146 - checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 147 - 148 - [[package]] 149 - name = "libc" 150 - version = "0.2.121" 151 - source = "registry+https://github.com/rust-lang/crates.io-index" 152 - checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" 153 - 154 - [[package]] 155 - name = "lock_api" 156 - version = "0.4.7" 157 - source = "registry+https://github.com/rust-lang/crates.io-index" 158 - checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 159 - dependencies = [ 160 - "autocfg", 161 - "scopeguard", 162 - ] 163 - 164 - [[package]] 165 - name = "log" 166 - version = "0.4.16" 167 - source = "registry+https://github.com/rust-lang/crates.io-index" 168 - checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" 169 - dependencies = [ 170 - "cfg-if", 171 - ] 172 - 173 - [[package]] 174 - name = "memchr" 175 - version = "2.4.1" 176 - source = "registry+https://github.com/rust-lang/crates.io-index" 177 - checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 178 - 179 - [[package]] 180 - name = "mio" 181 - version = "0.8.2" 182 - source = "registry+https://github.com/rust-lang/crates.io-index" 183 - checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" 184 - dependencies = [ 185 - "libc", 186 - "log", 187 - "miow", 188 - "ntapi", 189 - "wasi", 190 - "winapi", 191 - ] 192 - 193 - [[package]] 194 - name = "miow" 195 - version = "0.3.7" 196 - source = "registry+https://github.com/rust-lang/crates.io-index" 197 - checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" 198 - dependencies = [ 199 - "winapi", 200 - ] 201 - 202 - [[package]] 203 - name = "ntapi" 204 - version = "0.3.7" 205 - source = "registry+https://github.com/rust-lang/crates.io-index" 206 - checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" 207 - dependencies = [ 208 - "winapi", 209 - ] 210 - 211 - [[package]] 212 - name = "num_cpus" 213 - version = "1.13.1" 214 - source = "registry+https://github.com/rust-lang/crates.io-index" 215 - checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 216 - dependencies = [ 217 - "hermit-abi", 218 - "libc", 219 - ] 220 - 221 - [[package]] 222 - name = "once_cell" 223 - version = "1.10.0" 224 - source = "registry+https://github.com/rust-lang/crates.io-index" 225 - checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" 226 - 227 - [[package]] 228 - name = "parking_lot" 229 - version = "0.12.0" 230 - source = "registry+https://github.com/rust-lang/crates.io-index" 231 - checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" 232 - dependencies = [ 233 - "lock_api", 234 - "parking_lot_core", 235 - ] 236 - 237 - [[package]] 238 - name = "parking_lot_core" 239 - version = "0.9.2" 240 - source = "registry+https://github.com/rust-lang/crates.io-index" 241 - checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" 242 - dependencies = [ 243 - "cfg-if", 244 - "libc", 245 - "redox_syscall", 246 - "smallvec", 247 - "windows-sys", 248 - ] 249 - 250 - [[package]] 251 - name = "pin-project" 252 - version = "1.0.10" 253 - source = "registry+https://github.com/rust-lang/crates.io-index" 254 - checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" 255 - dependencies = [ 256 - "pin-project-internal", 257 - ] 258 - 259 - [[package]] 260 - name = "pin-project-internal" 261 - version = "1.0.10" 262 - source = "registry+https://github.com/rust-lang/crates.io-index" 263 - checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" 264 - dependencies = [ 265 - "proc-macro2", 266 - "quote", 267 - "syn", 268 - ] 269 - 270 - [[package]] 271 - name = "pin-project-lite" 272 - version = "0.2.8" 273 - source = "registry+https://github.com/rust-lang/crates.io-index" 274 - checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" 275 - 276 - [[package]] 277 - name = "pin-utils" 278 - version = "0.1.0" 279 - source = "registry+https://github.com/rust-lang/crates.io-index" 280 - checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 281 - 282 - [[package]] 283 - name = "proc-macro2" 284 - version = "1.0.36" 285 - source = "registry+https://github.com/rust-lang/crates.io-index" 286 - checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 287 - dependencies = [ 288 - "unicode-xid", 289 - ] 290 - 291 - [[package]] 292 - name = "quote" 293 - version = "1.0.17" 294 - source = "registry+https://github.com/rust-lang/crates.io-index" 295 - checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" 296 - dependencies = [ 297 - "proc-macro2", 298 - ] 299 - 300 - [[package]] 301 - name = "redox_syscall" 302 - version = "0.2.13" 303 - source = "registry+https://github.com/rust-lang/crates.io-index" 304 - checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" 305 - dependencies = [ 306 - "bitflags", 307 - ] 308 - 309 - [[package]] 310 - name = "ryu" 311 - version = "1.0.9" 312 - source = "registry+https://github.com/rust-lang/crates.io-index" 313 - checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 314 - 315 - [[package]] 316 - name = "scopeguard" 317 - version = "1.1.0" 318 - source = "registry+https://github.com/rust-lang/crates.io-index" 319 - checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 320 - 321 - [[package]] 322 - name = "serde" 323 - version = "1.0.136" 324 - source = "registry+https://github.com/rust-lang/crates.io-index" 325 - checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 326 - 327 - [[package]] 328 - name = "serde_json" 329 - version = "1.0.79" 330 - source = "registry+https://github.com/rust-lang/crates.io-index" 331 - checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" 332 - dependencies = [ 333 - "itoa", 334 - "ryu", 335 - "serde", 336 - ] 337 - 338 - [[package]] 339 - name = "sharded-slab" 340 - version = "0.1.4" 341 - source = "registry+https://github.com/rust-lang/crates.io-index" 342 - checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 343 - dependencies = [ 344 - "lazy_static", 345 - ] 346 - 347 - [[package]] 348 - name = "signal-hook-registry" 349 - version = "1.4.0" 350 - source = "registry+https://github.com/rust-lang/crates.io-index" 351 - checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 352 - dependencies = [ 353 - "libc", 354 - ] 355 - 356 - [[package]] 357 - name = "slab" 358 - version = "0.4.6" 359 - source = "registry+https://github.com/rust-lang/crates.io-index" 360 - checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" 361 - 362 - [[package]] 363 - name = "smallvec" 364 - version = "1.8.0" 365 - source = "registry+https://github.com/rust-lang/crates.io-index" 366 - checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 367 - 368 - [[package]] 369 - name = "socket2" 370 - version = "0.4.4" 371 - source = "registry+https://github.com/rust-lang/crates.io-index" 372 - checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 373 - dependencies = [ 374 - "libc", 375 - "winapi", 376 - ] 377 - 378 - [[package]] 379 - name = "switcher" 380 - version = "0.1.0" 381 - dependencies = [ 382 - "futures", 383 - "serde_json", 384 - "tokio", 385 - "tracing", 386 - "tracing-futures", 387 - "tracing-subscriber", 388 - ] 389 - 390 - [[package]] 391 - name = "syn" 392 - version = "1.0.90" 393 - source = "registry+https://github.com/rust-lang/crates.io-index" 394 - checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f" 395 - dependencies = [ 396 - "proc-macro2", 397 - "quote", 398 - "unicode-xid", 399 - ] 400 - 401 - [[package]] 402 - name = "thread_local" 403 - version = "1.1.4" 404 - source = "registry+https://github.com/rust-lang/crates.io-index" 405 - checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 406 - dependencies = [ 407 - "once_cell", 408 - ] 409 - 410 - [[package]] 411 - name = "tokio" 412 - version = "1.17.0" 413 - source = "registry+https://github.com/rust-lang/crates.io-index" 414 - checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" 415 - dependencies = [ 416 - "bytes", 417 - "libc", 418 - "memchr", 419 - "mio", 420 - "num_cpus", 421 - "once_cell", 422 - "parking_lot", 423 - "pin-project-lite", 424 - "signal-hook-registry", 425 - "socket2", 426 - "tokio-macros", 427 - "winapi", 428 - ] 429 - 430 - [[package]] 431 - name = "tokio-macros" 432 - version = "1.7.0" 433 - source = "registry+https://github.com/rust-lang/crates.io-index" 434 - checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" 435 - dependencies = [ 436 - "proc-macro2", 437 - "quote", 438 - "syn", 439 - ] 440 - 441 - [[package]] 442 - name = "tracing" 443 - version = "0.1.32" 444 - source = "registry+https://github.com/rust-lang/crates.io-index" 445 - checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" 446 - dependencies = [ 447 - "cfg-if", 448 - "pin-project-lite", 449 - "tracing-attributes", 450 - "tracing-core", 451 - ] 452 - 453 - [[package]] 454 - name = "tracing-attributes" 455 - version = "0.1.20" 456 - source = "registry+https://github.com/rust-lang/crates.io-index" 457 - checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" 458 - dependencies = [ 459 - "proc-macro2", 460 - "quote", 461 - "syn", 462 - ] 463 - 464 - [[package]] 465 - name = "tracing-core" 466 - version = "0.1.24" 467 - source = "registry+https://github.com/rust-lang/crates.io-index" 468 - checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" 469 - dependencies = [ 470 - "lazy_static", 471 - "valuable", 472 - ] 473 - 474 - [[package]] 475 - name = "tracing-futures" 476 - version = "0.2.5" 477 - source = "registry+https://github.com/rust-lang/crates.io-index" 478 - checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 479 - dependencies = [ 480 - "pin-project", 481 - "tracing", 482 - ] 483 - 484 - [[package]] 485 - name = "tracing-log" 486 - version = "0.1.2" 487 - source = "registry+https://github.com/rust-lang/crates.io-index" 488 - checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" 489 - dependencies = [ 490 - "lazy_static", 491 - "log", 492 - "tracing-core", 493 - ] 494 - 495 - [[package]] 496 - name = "tracing-subscriber" 497 - version = "0.3.10" 498 - source = "registry+https://github.com/rust-lang/crates.io-index" 499 - checksum = "b9df98b037d039d03400d9dd06b0f8ce05486b5f25e9a2d7d36196e142ebbc52" 500 - dependencies = [ 501 - "ansi_term", 502 - "sharded-slab", 503 - "smallvec", 504 - "thread_local", 505 - "tracing-core", 506 - "tracing-log", 507 - ] 508 - 509 - [[package]] 510 - name = "unicode-xid" 511 - version = "0.2.2" 512 - source = "registry+https://github.com/rust-lang/crates.io-index" 513 - checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 514 - 515 - [[package]] 516 - name = "valuable" 517 - version = "0.1.0" 518 - source = "registry+https://github.com/rust-lang/crates.io-index" 519 - checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 520 - 521 - [[package]] 522 - name = "wasi" 523 - version = "0.11.0+wasi-snapshot-preview1" 524 - source = "registry+https://github.com/rust-lang/crates.io-index" 525 - checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 526 - 527 - [[package]] 528 - name = "winapi" 529 - version = "0.3.9" 530 - source = "registry+https://github.com/rust-lang/crates.io-index" 531 - checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 532 - dependencies = [ 533 - "winapi-i686-pc-windows-gnu", 534 - "winapi-x86_64-pc-windows-gnu", 535 - ] 536 - 537 - [[package]] 538 - name = "winapi-i686-pc-windows-gnu" 539 - version = "0.4.0" 540 - source = "registry+https://github.com/rust-lang/crates.io-index" 541 - checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 542 - 543 - [[package]] 544 - name = "winapi-x86_64-pc-windows-gnu" 545 - version = "0.4.0" 546 - source = "registry+https://github.com/rust-lang/crates.io-index" 547 - checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 548 - 549 - [[package]] 550 - name = "windows-sys" 551 - version = "0.34.0" 552 - source = "registry+https://github.com/rust-lang/crates.io-index" 553 - checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" 554 - dependencies = [ 555 - "windows_aarch64_msvc", 556 - "windows_i686_gnu", 557 - "windows_i686_msvc", 558 - "windows_x86_64_gnu", 559 - "windows_x86_64_msvc", 560 - ] 561 - 562 - [[package]] 563 - name = "windows_aarch64_msvc" 564 - version = "0.34.0" 565 - source = "registry+https://github.com/rust-lang/crates.io-index" 566 - checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" 567 - 568 - [[package]] 569 - name = "windows_i686_gnu" 570 - version = "0.34.0" 571 - source = "registry+https://github.com/rust-lang/crates.io-index" 572 - checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" 573 - 574 - [[package]] 575 - name = "windows_i686_msvc" 576 - version = "0.34.0" 577 - source = "registry+https://github.com/rust-lang/crates.io-index" 578 - checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" 579 - 580 - [[package]] 581 - name = "windows_x86_64_gnu" 582 - version = "0.34.0" 583 - source = "registry+https://github.com/rust-lang/crates.io-index" 584 - checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" 585 - 586 - [[package]] 587 - name = "windows_x86_64_msvc" 588 - version = "0.34.0" 589 - source = "registry+https://github.com/rust-lang/crates.io-index" 590 - checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
-17
packages/switcher/Cargo.toml
··· 1 - [package] 2 - name = "switcher" 3 - version = "0.1.0" 4 - edition = "2021" 5 - 6 - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 - 8 - [dependencies] 9 - serde_json = "1" 10 - futures = "0.3" 11 - tracing = "0.1" 12 - tracing-futures = "0.2" 13 - tracing-subscriber = "0.3" 14 - 15 - [dependencies.tokio] 16 - version = "1" 17 - features = ["full"]
-29
packages/switcher/default.nix
··· 1 - { 2 - lib, 3 - rustPlatform, 4 - makeWrapper, 5 - gh, 6 - hostname, 7 - coreutils, 8 - nix, 9 - nixos-rebuild, 10 - home-manager, 11 - ncurses6, 12 - }: let 13 - runtimeDeps = [gh hostname coreutils nix nixos-rebuild home-manager ncurses6]; 14 - in 15 - rustPlatform.buildRustPackage { 16 - pname = "nobbz-switcher"; 17 - version = "0.1.0"; 18 - 19 - nativeBuildInputs = [makeWrapper]; 20 - 21 - src = ./.; 22 - 23 - cargoSha256 = "sha256-4HslCd3AMGZGFfADbQ/sdL9bj+R8woS8i0A9vKF1FgU="; 24 - 25 - postInstall = '' 26 - wrapProgram $out/bin/switcher \ 27 - --set PATH "${lib.makeBinPath runtimeDeps}:/run/wrappers/bin" 28 - ''; 29 - }
-121
packages/switcher/src/main.rs
··· 1 - use futures::future; 2 - use std::{ 3 - error::Error, 4 - fmt::{Debug, Display}, 5 - io::Error as IoError, 6 - path::Path, 7 - process::ExitStatus, 8 - str, 9 - }; 10 - use tokio::{self, process::Command}; 11 - use tracing::{instrument, Level}; 12 - use tracing_futures::Instrument; 13 - use tracing_subscriber::FmtSubscriber; 14 - 15 - const OWNER: &str = "nobbz"; 16 - const REPO: &str = "nixos-config"; 17 - 18 - const BRANCH: &str = "main"; 19 - 20 - #[instrument] 21 - async fn get_command_out(cmd: &mut Command) -> String { 22 - let out = cmd.output().await.unwrap().stdout; 23 - 24 - str::from_utf8(&out).unwrap().trim().to_string() 25 - } 26 - 27 - #[instrument] 28 - async fn spawn_command(cmd: &mut Command) -> Result<ExitStatus, IoError> { 29 - cmd.spawn().unwrap().wait().await 30 - } 31 - 32 - #[instrument] 33 - async fn retrieve_sha<S1, S2, S3>(owner: S1, repo: S2, branch: S3) -> String 34 - where 35 - S1: Display + Debug, 36 - S2: Display + Debug, 37 - S3: Display + Debug, 38 - { 39 - let endpoint = format!("/repos/{}/{}/commits/{}", owner, repo, branch); 40 - 41 - get_command_out(Command::new("gh").args(["api", &endpoint, "--jq", ".sha"])).await 42 - } 43 - 44 - #[instrument] 45 - async fn get_hostname() -> String { 46 - get_command_out(&mut Command::new("hostname")).await 47 - } 48 - 49 - #[instrument] 50 - async fn get_username() -> String { 51 - get_command_out(&mut Command::new("whoami")).await 52 - } 53 - 54 - #[instrument] 55 - async fn get_tempfldr() -> String { 56 - get_command_out(Command::new("mktemp").arg("-d")).await 57 - } 58 - 59 - #[tokio::main] 60 - async fn main() -> Result<(), Box<dyn Error>> { 61 - let _subscriber = FmtSubscriber::builder().with_max_level(Level::INFO).init(); 62 - 63 - tracing::info!("Gathering info"); 64 - 65 - let sha1_promise = retrieve_sha(OWNER, REPO, BRANCH); 66 - let host_promise = get_hostname(); 67 - let user_promise = get_username(); 68 - let temp_promise = get_tempfldr(); 69 - 70 - let (sha1, host, user, temp) = 71 - future::join4(sha1_promise, host_promise, user_promise, temp_promise) 72 - .instrument(tracing::trace_span!("join4")) 73 - .await; 74 - 75 - tracing::info!(%sha1, %host, %user, %temp, "Gathered info"); 76 - tracing::info!("Building strings"); 77 - 78 - let flake_url = format!("github:{}/{}?ref={}", OWNER, REPO, sha1); 79 - let nixos_config = format!("{}#nixos/config/{}", flake_url, host); 80 - let nixos_rebuild = format!("{}#{}", flake_url, host); 81 - let home_config = format!("{}#home/config/{}@{}", flake_url, user, host); 82 - let home_manager = format!("{}#{}@{}", flake_url, user, host); 83 - let out_link = Path::new(&temp).join("result"); 84 - 85 - tracing::info!(%flake_url, %nixos_config, %nixos_rebuild, %home_config, %home_manager, ?out_link, "Built strings"); 86 - tracing::info!("Starting to build"); 87 - 88 - spawn_command(Command::new("nix").args([ 89 - "build", 90 - "--keep-going", 91 - "-L", 92 - "--out-link", 93 - out_link.as_os_str().to_str().unwrap(), 94 - &nixos_config, 95 - &home_config, 96 - ])) 97 - .await?; 98 - 99 - tracing::info!("Finished building"); 100 - tracing::info!(%host, "Switching system configuration"); 101 - 102 - spawn_command(Command::new("sudo").args([ 103 - "nixos-rebuild", 104 - "switch", 105 - "--flake", 106 - &nixos_rebuild, 107 - ])) 108 - .await?; 109 - 110 - tracing::info!(%host, "Switched system configuration"); 111 - tracing::info!(%user, %host, "Switching user configuration"); 112 - 113 - spawn_command(Command::new("home-manager").args(["switch", "--flake", &home_manager])).await?; 114 - 115 - tracing::info!(%user, %host, "Switched user configuration"); 116 - tracing::info!(%temp, "Cleaning up"); 117 - 118 - spawn_command(Command::new("rm").args(["-rfv", &temp])).await?; 119 - 120 - Ok(()) 121 - }
+36
parts/auxiliary.nix
··· 1 + _: { 2 + perSystem = { 3 + config, 4 + pkgs, 5 + inputs', 6 + self', 7 + system, 8 + ... 9 + }: { 10 + formatter = pkgs.alejandra; 11 + 12 + apps.rotate.meta.description = "rotate keys for sops"; 13 + apps.rotate.program = let 14 + sopsrotate = pkgs.writeShellScript "sops-rotate" '' 15 + file=$1 16 + 17 + printf "Rotating %s...\n" "''${file}" 18 + ${pkgs.sops}/bin/sops -r -i "''${file}" 19 + ''; 20 + rotate = pkgs.writeShellScript "rotate" '' 21 + ${pkgs.git}/bin/git switch -c rotate-$(${pkgs.coreutils}/bin/date -Idate) >/dev/null || true 22 + 23 + ${pkgs.findutils}/bin/find secrets -type f -exec ${sopsrotate} '{}' \; 24 + 25 + ${pkgs.git}/bin/git add secrets 26 + ${pkgs.git}/bin/git commit -m "chore: rotate secrets $(${pkgs.coreutils}/bin/date -Idate)" 27 + ''; 28 + in "${rotate}"; 29 + 30 + devShells.default = pkgs.mkShell { 31 + packages = builtins.attrValues { 32 + inherit (pkgs) npins sops age ssh-to-age nil alejandra; 33 + }; 34 + }; 35 + }; 36 + }
+128
parts/home_configs.nix
··· 1 + { 2 + self, 3 + inputs, 4 + config, 5 + lib, 6 + npins, 7 + ... 8 + }: let 9 + cfg = config.nobbz.homeConfigurations; 10 + 11 + enabledCfgs = lib.filterAttrs (_: config: config.enable) cfg; 12 + 13 + configs = builtins.mapAttrs (_: config: config.finalHome) enabledCfgs; 14 + 15 + packages = builtins.attrValues (builtins.mapAttrs (_: config: config.packageModule) enabledCfgs); 16 + in { 17 + options = { 18 + nobbz.homeConfigurations = lib.mkOption { 19 + type = lib.types.attrsOf (lib.types.submodule ({ 20 + name, 21 + config, 22 + ... 23 + }: { 24 + options = { 25 + enable = lib.mkEnableOption "Enable this home configuration." // {default = true;}; 26 + 27 + nixpkgs = lib.mkOption { 28 + type = lib.types.unspecified; 29 + default = inputs.nixpkgs; 30 + }; 31 + 32 + system = lib.mkOption {type = lib.types.enum ["x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"];}; 33 + 34 + username = lib.mkOption { 35 + type = lib.types.str; 36 + default = builtins.elemAt (lib.strings.split "@" name) 0; 37 + }; 38 + 39 + hostname = lib.mkOption { 40 + type = lib.types.str; 41 + default = builtins.elemAt (lib.strings.split "@" name) 2; 42 + }; 43 + 44 + entryPoint = lib.mkOption { 45 + type = lib.types.unspecified; 46 + readOnly = true; 47 + }; 48 + 49 + base = lib.mkOption { 50 + type = lib.types.str; 51 + readOnly = true; 52 + }; 53 + 54 + homeDirectory = lib.mkOption { 55 + type = lib.types.str; 56 + readOnly = true; 57 + }; 58 + 59 + modules = lib.mkOption { 60 + type = lib.types.listOf lib.types.unspecified; 61 + default = []; 62 + }; 63 + 64 + finalModules = lib.mkOption { 65 + type = lib.types.listOf lib.types.unspecified; 66 + readOnly = true; 67 + }; 68 + 69 + packageName = lib.mkOption { 70 + type = lib.types.str; 71 + readOnly = true; 72 + }; 73 + 74 + finalPackage = lib.mkOption { 75 + type = lib.types.package; 76 + readOnly = true; 77 + }; 78 + 79 + finalHome = lib.mkOption { 80 + type = lib.types.unspecified; 81 + readOnly = true; 82 + }; 83 + 84 + packageModule = lib.mkOption { 85 + type = lib.types.unspecified; 86 + readOnly = true; 87 + }; 88 + }; 89 + 90 + config = lib.mkIf config.enable { 91 + entryPoint = import "${self}/home/configurations/${config.username}_at_${config.hostname}.nix" (inputs // {inherit self;}); 92 + base = 93 + if lib.strings.hasSuffix "-darwin" config.system 94 + then "Users" 95 + else "home"; 96 + homeDirectory = "/${config.base}/${config.username}"; 97 + 98 + finalModules = 99 + [ 100 + config.entryPoint 101 + {home = {inherit (config) username homeDirectory;};} 102 + {systemd.user.startServices = "sd-switch";} 103 + {news.display = "silent";} 104 + inputs.nixos-vscode-server.nixosModules.home 105 + inputs.sops-nix.homeManagerModules.sops 106 + ] 107 + ++ config.modules 108 + ++ builtins.attrValues self.homeManagerModules 109 + ++ builtins.attrValues self.mixedModules; 110 + 111 + packageName = "home/config/${name}"; 112 + finalPackage = config.finalHome.activationPackage; 113 + 114 + packageModule = {${config.system}.${config.packageName} = config.finalPackage;}; 115 + 116 + finalHome = inputs.home-manager.lib.homeManagerConfiguration { 117 + pkgs = config.nixpkgs.legacyPackages.${config.system}; 118 + extraSpecialArgs.npins = npins; 119 + modules = config.finalModules; 120 + }; 121 + }; 122 + })); 123 + }; 124 + }; 125 + 126 + config.flake.homeConfigurations = configs; 127 + config.flake.packages = lib.mkMerge packages; 128 + }
+21
parts/home_modules.nix
··· 1 + { 2 + self, 3 + inputs, 4 + config, 5 + lib, 6 + ... 7 + }: let 8 + cfg = config.nobbz.homeManagerModules; 9 + 10 + inherit (import ./module_helpers.nix lib inputs) submodule; 11 + 12 + modules = builtins.mapAttrs (_: config: config.wrappedModule) cfg; 13 + in { 14 + options = { 15 + nobbz.homeManagerModules = lib.mkOption { 16 + type = lib.types.attrsOf submodule; 17 + }; 18 + }; 19 + 20 + config.flake.homeManagerModules = modules; 21 + }
+51
parts/module_helpers.nix
··· 1 + lib: inputs: let 2 + inherit (builtins) isString isPath; 3 + 4 + callModule = module: args: let 5 + moduleToImport = 6 + if args == null 7 + then module 8 + else import module args; 9 + in 10 + {imports = [moduleToImport];} 11 + // lib.optionalAttrs (builtins.any (p: p module) [isPath isString]) {_file = module;}; 12 + 13 + from = lib.types.oneOf [lib.types.str lib.types.path]; 14 + 15 + submodule = lib.types.coercedTo from (m: {module = m;}) (lib.types.submodule ({ 16 + name, 17 + config, 18 + ... 19 + }: { 20 + options = { 21 + name = lib.mkOption { 22 + type = lib.types.str; 23 + default = name; 24 + }; 25 + 26 + module = lib.mkOption { 27 + type = lib.types.oneOf [ 28 + lib.types.str 29 + lib.types.path 30 + # TODO: add sets and functions 31 + ]; 32 + }; 33 + 34 + extraArgs = lib.mkOption { 35 + type = lib.types.nullOr (lib.types.attrsOf lib.types.unspecified); 36 + default = inputs; 37 + }; 38 + 39 + wrappedModule = lib.mkOption { 40 + type = lib.types.unspecified; 41 + readOnly = true; 42 + }; 43 + }; 44 + 45 + config = { 46 + wrappedModule = callModule config.module config.extraArgs; 47 + }; 48 + })); 49 + in { 50 + inherit callModule submodule; 51 + }
+21
parts/nixos_modules.nix
··· 1 + { 2 + self, 3 + inputs, 4 + config, 5 + lib, 6 + ... 7 + }: let 8 + cfg = config.nobbz.nixosModules; 9 + 10 + inherit (import ./module_helpers.nix lib inputs) submodule; 11 + 12 + modules = builtins.mapAttrs (_: config: config.wrappedModule) cfg; 13 + in { 14 + options = { 15 + nobbz.nixosModules = lib.mkOption { 16 + type = lib.types.attrsOf submodule; 17 + }; 18 + }; 19 + 20 + config.flake.nixosModules = modules; 21 + }
+118
parts/system_configs.nix
··· 1 + { 2 + self, 3 + inputs, 4 + config, 5 + lib, 6 + ... 7 + }: let 8 + cfg = config.nobbz.nixosConfigurations; 9 + 10 + configs = builtins.mapAttrs (_: config: config.finalSystem) cfg; 11 + 12 + packages = builtins.attrValues (builtins.mapAttrs (_: config: config.packageModule) cfg); 13 + in { 14 + options = { 15 + nobbz.nixosConfigurations = lib.mkOption { 16 + type = lib.types.attrsOf (lib.types.submodule ({ 17 + name, 18 + config, 19 + ... 20 + }: { 21 + options = { 22 + nixpkgs = lib.mkOption { 23 + type = lib.types.unspecified; 24 + default = inputs.nixpkgs; 25 + }; 26 + system = lib.mkOption {type = lib.types.enum ["x86_64-linux" "aarch64-linux"];}; 27 + 28 + modules = lib.mkOption { 29 + type = lib.types.listOf lib.types.unspecified; 30 + default = []; 31 + }; 32 + 33 + entryPoint = lib.mkOption { 34 + type = lib.types.unspecified; 35 + readOnly = true; 36 + }; 37 + 38 + finalModules = lib.mkOption { 39 + type = lib.types.listOf lib.types.unspecified; 40 + readOnly = true; 41 + }; 42 + 43 + configFolder = lib.mkOption { 44 + type = lib.types.str; 45 + readOnly = true; 46 + }; 47 + 48 + bootloader = lib.mkOption { 49 + type = lib.types.str; 50 + readOnly = true; 51 + }; 52 + 53 + hardware = lib.mkOption { 54 + type = lib.types.str; 55 + readOnly = true; 56 + }; 57 + 58 + finalSystem = lib.mkOption { 59 + type = lib.types.unspecified; 60 + readOnly = true; 61 + }; 62 + 63 + packageName = lib.mkOption { 64 + type = lib.types.str; 65 + readOnly = true; 66 + }; 67 + 68 + finalPackage = lib.mkOption { 69 + type = lib.types.package; 70 + readOnly = true; 71 + }; 72 + 73 + packageModule = lib.mkOption { 74 + type = lib.types.unspecified; 75 + readOnly = true; 76 + }; 77 + }; 78 + 79 + config = { 80 + configFolder = "${self}/nixos/configurations"; 81 + entryPoint = import "${config.configFolder}/${name}.nix" (inputs // {inherit self;}); 82 + bootloader = "${config.configFolder}/bootloader/${name}.nix"; 83 + hardware = "${config.configFolder}/hardware/${name}.nix"; 84 + 85 + finalModules = 86 + [ 87 + {boot.tmp.cleanOnBoot = true;} 88 + {networking.hostName = name;} 89 + {nix.flakes.enable = true;} 90 + {system.configurationRevision = self.rev or "${self.dirtyRev or "unknown"}-dirty";} 91 + {documentation.man.enable = true;} 92 + {documentation.man.generateCaches = true;} 93 + {nixpkgs.hostPlatform.system = config.system;} 94 + inputs.sops-nix.nixosModules.sops 95 + ] 96 + ++ config.modules 97 + ++ builtins.attrValues { 98 + inherit (config) entryPoint bootloader hardware; 99 + } 100 + ++ builtins.attrValues self.nixosModules 101 + ++ builtins.attrValues self.mixedModules; 102 + 103 + packageName = "nixos/config/${name}"; 104 + finalPackage = config.finalSystem.config.system.build.toplevel; 105 + 106 + packageModule = {${config.system}.${config.packageName} = config.finalPackage;}; 107 + 108 + finalSystem = config.nixpkgs.lib.nixosSystem { 109 + modules = config.finalModules; 110 + }; 111 + }; 112 + })); 113 + }; 114 + }; 115 + 116 + config.flake.nixosConfigurations = configs; 117 + config.flake.packages = lib.mkMerge packages; 118 + }
+34
secrets/mimas/default.yaml
··· 1 + restic: ENC[AES256_GCM,data:XMkh9jvehbD3Zg==,iv:9NdaTuhLR57mv8OaCSyso9cfr8V1iQNuQuWInKyi3bI=,tag:Kz08EadPaIWcytF6ASJssw==,type:str] 2 + rustic: ENC[AES256_GCM,data:ETWxyvBz3AlXNp0=,iv:MXlQuvTJa2mZuXeiCX/YYpbqKpT1+RE5TNahBrUMM3Y=,tag:Vl7n0JF5M9Q+xZD32G1njQ==,type:str] 3 + rustic-user: ENC[AES256_GCM,data:2hwYQS4nAA==,iv:y0pbF5axrPRdYRGAmx+kp7jkmSl77R8LQMUKQaiDWak=,tag:8kgcxNtvjmyT9PPc/WjrOg==,type:str] 4 + traefik: ENC[AES256_GCM,data:kMnWaxpt0fLxJeX3oYLQrnZPS+pq/xjqVINleaCfaiXeMlJ8qno0eHBkx82gjldeObvTO1ENFz5k5EJ0ICbnS0ny6qHxeBAMaNVF3dZ+XmKx7w==,iv:ZL90s3YuBmwafBz7VEwCTr2flnkguUxJgPp9OrnyfGA=,tag:UeyiUtdQwOlyQoHObL+80w==,type:str] 5 + warden: ENC[AES256_GCM,data:H3So3oZfZ6MBKsjxJNnxk/6UZi6J5D6H5bCMsb1E7rk/r51qYDe+1z2Gq1o0qqwX0k/O4Dxq7wJPaelLO4kE9bxQHvoT1NJQIZolnYF5G/PMqMKWIE4bxq6uLmxNKBmjOkJLo3hBiOHT8MjD/S6rOkUAB6Mn4YRKqcG+EG1Wz0sw1a+6KcNFMqO9xdcwD44MZYrreexOiwVx6UMPSJc/67fvzJ4ms/E3gQEOq6VvCHpxmk4bujo9ucqajfPGK4ewHqkdn4r0vQvrYxXMBkX7AXcL6CHSZ+ht0Hcw0A+m12GuTSHC0g38Avz5klP3FIruzj7oWcjv6XPBYfk=,iv:OauSp63ywmrkENIqBVGVQ99Ozyom0o+DfSqYaL46Ujg=,tag:ZcYkapCUZZE9DDh0PSfZEg==,type:str] 6 + sops: 7 + kms: [] 8 + gcp_kms: [] 9 + azure_kv: [] 10 + hc_vault: [] 11 + age: 12 + - recipient: age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r 13 + enc: | 14 + -----BEGIN AGE ENCRYPTED FILE----- 15 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVRkRBcWlnM25ablJBdit2 16 + b0Y1Zy9PM2FjRmg5ajN0YWpsaitJUStTTXlBCnpuL2wvU0hxZFpDREhiTmhnaFFi 17 + LzkxMmVHYWo4TkZOaStJeHZsK3pIZG8KLS0tIC9DSjUyUVk0SG9mNHd0aGdXN1ow 18 + N2Q4QWk3RU83dUxuSG85V1N5TzFkSVEK58cE6fE6mxjRCgtHRMqqahqMkwYeUnhx 19 + F2Bdg5oPPQxoqIf769fZD9L1y/+LZ6Vi4YhJkjfMVFXk6YtEjKJSmQ== 20 + -----END AGE ENCRYPTED FILE----- 21 + - recipient: age10jl78vwyqk622dpn2890l9jl4et3p7lsr8wh8vusem3j8jdxle8qg000qa 22 + enc: | 23 + -----BEGIN AGE ENCRYPTED FILE----- 24 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkY3EzZyt1YXFTTlVhK3Rk 25 + djUvWmVjeDBSajlENCtNc0RZMVRVWUVuRWtBCnFpa0NnVjBvb0J2NCtpYitoMngv 26 + WkxNaDNIQnRSSm0vSXF4a1RYcmNsK2MKLS0tIE5zSkExNVVJYkZsV244eElwMTd0 27 + N3ZuTHhVdFo0aGZVMXFlaTdsRi9lRUUK+K5CUVCdjtMVegVydoKRIb6kpPnfBiy1 28 + FxkXAp3a1qU2WqNvXCSO3gtUwYaMG+MPSCWI1gA3oBjGGtTasHyHsQ== 29 + -----END AGE ENCRYPTED FILE----- 30 + lastmodified: "2025-03-08T10:44:25Z" 31 + mac: ENC[AES256_GCM,data:iKKmalnJnmm8EkDupTPKmKJydLLYkbAabLy5KJdQfKGvRj6vbJAQHZ3u0Pu2TI0oi5Xv3dtPh7ww04kT0Whe1E97p4t3RPyNCCGNqA8OqQiCPDUn6uqTQwOo1//3xIGFnnRC0VSYrQT0rjebbL96RnWE9XF67TefycxIMHusUXU=,iv:FU6VTW2zkEIlH5P/rr58gmuMnz16TCLP+UtEVkiLueg=,tag:uf7I1GwWxXOT190y8Hddow==,type:str] 32 + pgp: [] 33 + unencrypted_suffix: _unencrypted 34 + version: 3.9.4
+30
secrets/mimas/nmelzer/default.yaml
··· 1 + rustic: ENC[AES256_GCM,data:aYi1wQgLgRL3n40=,iv:NHuqnSibmY/RkJrSUWm0TbgG45iSdjso9ABI8SGqUTg=,tag:k13fNK3kDcylC53d/haqog==,type:str] 2 + sops: 3 + kms: [] 4 + gcp_kms: [] 5 + azure_kv: [] 6 + hc_vault: [] 7 + age: 8 + - recipient: age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r 9 + enc: | 10 + -----BEGIN AGE ENCRYPTED FILE----- 11 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3U1ExOVN2aWVRVnB2M3RR 12 + QmxQNDZnSWVWMW1IZWh5YmFmNTZYbGRzSFVRCjdvSGp1WThzc29aNUZQMHJDMThJ 13 + MXNURHJUVVpDQ1hmUDBFamJ3TnRUSzQKLS0tIExXdWNoRm9aL29nUldQemwxOXdV 14 + aktSY1lQZmxkTThpcU82Q0dwSUUzUmcKm2VCJHEUzjz2vXAJH1wOovNqzK6Hkk2z 15 + hoIQzqgfQL3a4WA1q0Oj+R8wBChuRMUAYW4+TWCIAckKKwLqRyzBcQ== 16 + -----END AGE ENCRYPTED FILE----- 17 + - recipient: age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6 18 + enc: | 19 + -----BEGIN AGE ENCRYPTED FILE----- 20 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSamQ1R0tHZGIxUlN3NWtV 21 + Q1htSVdJMG5rUEN6Rm1QTStONys3YjNiVEdzCmE0bDJCa1VaVTIyK1IvTDBFbVhs 22 + ZWVGSzdwUWpVZTNSYUkvNjNtTERnZHMKLS0tIHRLSnBxTm8rVVo5ME4vS0dKZXF5 23 + MjdaWk9mZEczVGVxZEpnN3pCQTdMOFEKO4oemn8P9PYZVTsJ81oDy17PRAaeu3pn 24 + zxZ5a8/IrS/lZfMJ1vYwlZf0AEgOMTSyjVMNyOkWAgWIq8z1UkrpUA== 25 + -----END AGE ENCRYPTED FILE----- 26 + lastmodified: "2025-03-08T10:28:45Z" 27 + mac: ENC[AES256_GCM,data:k+Ui8hxJM/W4vHxZtSkTO86L81ZnzXHcX+VEzef438dfoB6rhIUhz6OaVfLnF6v3RSzRPsYCoDP8L2p1vHAY42ljl4jzZvMqrIYU2N7ATTNFc+m2FO1lcfmKbsOqjkrVQxnux8lwBdD9e2H4/xOB+nAivuCEDd3rihYR0yRYiMI=,iv:yMu0MA0VTdwUsKkZUZAVo91iI9qaT+qOVVI3hlmZC0c=,tag:bbKM/vE0lEpvPHIKWk9llQ==,type:str] 28 + pgp: [] 29 + unencrypted_suffix: _unencrypted 30 + version: 3.8.1
+30
secrets/phoebe/nmelzer/default.yaml
··· 1 + ssh: ENC[AES256_GCM,data:Ti7PvRp+ooyu/MHGv90zlACZVzE5EseJUFk5KvxwYbE+bLcEKnTWW8yV+BBa3xoOe50P4X0GeNFHLsaCcCtrjNshNJSxZ3QHt1TQjLABvKrQvpU8BgN3qT3RMo019NMj0+UxWL4/5icaR4XAax+JWCTBXhncqFzyXqcB/IbLLJKKqqFTWe4zYhvQitBDF+oU6nTv/qTtj/6B7XN6byTbGPjTJrEXLotmbvl8ll/LiEkTPmuu,iv:poHvd4U4dJha27Bqf4hA1pFhna29kO/RnFNjJsflpaA=,tag:uUfl6tjzVQQ5oaKOcmUYQA==,type:str] 2 + sops: 3 + kms: [] 4 + gcp_kms: [] 5 + azure_kv: [] 6 + hc_vault: [] 7 + age: 8 + - recipient: age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r 9 + enc: | 10 + -----BEGIN AGE ENCRYPTED FILE----- 11 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwMnNzT2dFWWVPRjh2QUdF 12 + VUZkUzdsQXRISG9kaHVqSGp2UWhCNlN3cVFJCmtQbE9LelRkbW4yU3ZyWG9MdnZB 13 + b1k1QUwrOXBZQTVoRTArNGFtTEJSU0kKLS0tIG5KS3ZFd0hKMEhsSkV4ck5za2VQ 14 + YzFLSjNUVXNRaklnczVKdGQ4V0JYUE0KGVHj8sWKKvVGwMrYmx0Js1uI1DmD028V 15 + R+Y+p8H766496hBt6Eza6r7JhKtLXR5CrcoItq8m+fWU6lu+ElsnAw== 16 + -----END AGE ENCRYPTED FILE----- 17 + - recipient: age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna 18 + enc: | 19 + -----BEGIN AGE ENCRYPTED FILE----- 20 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRSTB0dGxWOFhTK0FHcGxI 21 + VkFKV2NkZTlJRVNSZ1dnWVBKQk02YmZ3aERnClZaeTFSYzRJZ3ZWQjNPc1BnanhU 22 + ak1RZ0w0MDExZVlJWVNrYjZxMHZsNEkKLS0tIE9tWHlVMEFpek1VTFdROE8zUFZa 23 + VU9yempBMGVXenkxdkpHZC9YdlFZYm8KsdOmOI4ah0pEjqPt9XnJNxMyFSY4eYsI 24 + UOgJZqRhlG8Y4NL6J1DyJPfeKeIroTAbNoCb65lxWHHWfoPvt3gU3A== 25 + -----END AGE ENCRYPTED FILE----- 26 + lastmodified: "2025-03-08T10:28:45Z" 27 + mac: ENC[AES256_GCM,data:ycmOZIduc6cbx9daCGmLOL6eNSroAkGJw9dSnR79feaplXi6hmvycijcSJkys2vA3m81K2E7MW465GfodkpW1YWT1xW8RPp+WOOlqZvu3qoSu3F2T/VJxx4wCzTaXwvkcY9APAqb+WydN5KQDzakWaJfw+gTP3OS8LTRkYCDtcc=,iv:soCcQcGoi41g+g5X1SVDNH7iH28BCSImZqY1OE/H1Bo=,tag:RGY47osA22GETBuOynX1Dg==,type:str] 28 + pgp: [] 29 + unencrypted_suffix: _unencrypted 30 + version: 3.9.1
+57
secrets/users/nmelzer/default.yaml
··· 1 + access-tokens: ENC[AES256_GCM,data:sLkIWAyispOwNUZJqXfTFVl8NbUcLhWhgLIVI2rahROYHMO3aU/0x8BOtmm0QkPYHA3C7GwzyvatMoASJWrqn6ife48=,iv:BPI8HwuKwfzOMT2gs7U0cpbpP77f+X/HvCcfvIJh9Q4=,tag:Kf2wZ+3xtKhaSY5S1QjTuw==,type:str] 2 + sops: 3 + kms: [] 4 + gcp_kms: [] 5 + azure_kv: [] 6 + hc_vault: [] 7 + age: 8 + - recipient: age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r 9 + enc: | 10 + -----BEGIN AGE ENCRYPTED FILE----- 11 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwcVV6MWRlWjhSQUt6V2E4 12 + R3h5ZTlTei9QaTBnSm0zQXU4Q2dkVFdkL0JRCjVnbHFpQ0VaVis1TENCbVQ0Tm9F 13 + bmxZakNpMmIyTmZTdy9aRDJKNGU0dWMKLS0tIHYwMGJxV3VhNTd3b1gwRUREMWVW 14 + MUVzclBGZmV5d2lZcFJyMzViZGxXbFkKpgyVR4xv8NA6J7keZwVvJX0QSjoTAaW7 15 + 9fu5UR/d/pYIoJswd7jPNdhnClRLnTpJB62RZf+HHzGU2uq6aND1AA== 16 + -----END AGE ENCRYPTED FILE----- 17 + - recipient: age18p8x2cxam2l0trtpyhj4x9amcppp9ruzkqxzgapy9wnfpzl9hgaqlkht86 18 + enc: | 19 + -----BEGIN AGE ENCRYPTED FILE----- 20 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXeGFqL0NVaFYxaWVNdVFa 21 + Y3JKdFE3dnh0cFhQRVFqZjdXWHJ6VjV4eVdZCmZQUmJXNDZUbmVvWjRaMk5VSkxL 22 + dFpVTDRqR05xcm5OMDYxc2NjNXNJYTAKLS0tIFNmZ0JsR2MwSzhWeWhwUEx0WlUy 23 + ZlM1NXhPSjdQaGZlVDN1UGZLNDJRNVEKLmyd5dcZhNPKltxgVgHjJR1KQEcYOJ1V 24 + 6jY2Pq1dw8n8CswcThH4GmWBTqttEirFV8tB8CkYvHGk7oJCpX8gIg== 25 + -----END AGE ENCRYPTED FILE----- 26 + - recipient: age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6 27 + enc: | 28 + -----BEGIN AGE ENCRYPTED FILE----- 29 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwTEZRbk42bk9UdWh5bUFY 30 + MlBoVUFScE0yUlJNeUlDOFNkZTNmZ2ZYZXg4CnV0a3JTOEZmZXdJYmxUOUlQR2pm 31 + QzRmcGhWZW5RcGpLYURTWGoxcEtZVVUKLS0tIHVieWVteHcyMFRUOEZFVVYxN1oz 32 + SklxWSs3RDhtNHdjZ2tZb0ZSRG4ydlkKvjxtjpOtaNmzeGnVqVLbkI8cEh0wKsLH 33 + k5J7At247/4BFnQApfnw2cbeve2aQVsDjO6a6aZwcVrYQrErq/Ltog== 34 + -----END AGE ENCRYPTED FILE----- 35 + - recipient: age1tf0zelmw4lh9gvkl0qycdk83fut9t4q3tfcdzk8cvlyhjp7z0g2q7hklgq 36 + enc: | 37 + -----BEGIN AGE ENCRYPTED FILE----- 38 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvemdIMXNVSFNibjBmc3cz 39 + YXR3dHNGVGpUZDhtWGtSZVMwWHdKcU9zQ0VjCnNpdmMzNldvYi91ZWdGTkJyaWlF 40 + R2tBcHg5aXpFR2x3M2Q0RU0vVWU0OUEKLS0tIEZYRWVpc2JLWGEvVExpSktDcFNQ 41 + ZDFySCtOdk1Kdm1yRnlaTzFZRkpvQVUKGZoNU9KJgFOJau7Gxge47txwpAlMh2rQ 42 + 6Hfjf8E1igzLnbjvxQcGa2xVvI95KqhKZZclzPX9Vagl1z3XnoCvSw== 43 + -----END AGE ENCRYPTED FILE----- 44 + - recipient: age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna 45 + enc: | 46 + -----BEGIN AGE ENCRYPTED FILE----- 47 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1ci9GbWNmMWU4S1lGelFi 48 + TVAvUUE0TmtxNE9nSURqQjVSb244bnBjdlJBCkY5eHhaRUxiOXA2OFhSTkthR0d4 49 + dDhMUGhNeXA3aHcvemNZczU2bVpsQkkKLS0tIFZEMFFyTGJwWkR6QXFvYnZHVnNs 50 + OUR3N2IyMkxJc3RqcmorUFBOYjRpa2cKPQT3cmtP7I2C38OPaRqxudCXv6CEObnp 51 + DOVPG5JpeQGEu74kK5WTqbWlQU8AToOXmJdc+ru7ea1wAiXZiKEG4Q== 52 + -----END AGE ENCRYPTED FILE----- 53 + lastmodified: "2025-03-08T10:28:45Z" 54 + mac: ENC[AES256_GCM,data:VktkGG1xk+tFtgdmLrM7rLQ+NEqDMATyu0kdm4iRe61mcMppNVR7ZxjP7Ryfz6kkiwAfqrv5g8pzaoHHCJoLAOShgCDdHB49USDVR7OZHp/BiNJkSwSYgSWsWQf4Wxve2lADcGJNrOD/l8jmO9DcUDldLdGEGJeZ6waej3g7z7Q=,iv:FhfHa/LN9UVC8fnilYv2NxlNT+xRRXdsKIejOqug4cc=,tag:mTBuhaR2AxulRrfPSB6F+Q==,type:str] 55 + pgp: [] 56 + unencrypted_suffix: _unencrypted 57 + version: 3.9.1
+36
secrets/users/nmelzer/github
··· 1 + { 2 + "data": "ENC[AES256_GCM,data:WaE9ywj9g4TvMdjrRmKjwxwTuak4gsPENMaP37qdxQTSvp+dhklwaIh+LIAIMhPHYtrhBMNj1viHnaIETwMIB7uUsblKIYa6AOxpi9CU9xPkpBhKGw7vMEfCjlj9rHPjB41W9EN/EDVgY0phYFRF7DSoOa1wpHouKwKbbaO3r8L+ZbN4BOiizquzMOVOxp1b71xsc34WvrAIQc7+0H5f145I+KPAKGkUSMrV7t0RJTC24ENa9Zz7n0NduoLokK/IGXt6tsQNnzdS/DTmLw2W6fVkb5b4uzEvkqgnQOuQilH4CMX+xsuEkUkWqe3E8sUlzvdUszAjfruQUvJDuC//Vvx0vE1Kx70h+8BCqDGPLIs/4aEtW7xfu5B09WOQKByyd86NArZsC6R+sbmTCPD7WLFV9NI7Sg+E1wkPSmtYUYeMTmvPwfNISLKC4KHNm0cp5rb0EhmZTxKu1qId59vNdpjTnTEz0AZAGoVB1pGi45Bb0pUE/n54WsNhuscOVHk2XdYH/BTcEU8VYpLvcNAWFX/a1MWc0Bx21e8Qk/KNZGuATrWLiXIhGxT33bmlm2/Lb+5LS7xwMxomu1g0xGzSzD3z2B9CExekUw7q9VWfAinVecHA8NbMLrajkqGQb7fbcTqXOQqXL6BrQDbaOb/hC/AffYq4SEurvP4BI30E1hArLIlHabLwxBOaNLB/Ii7i51BKWqQGaof01ziAWChptvSic/oN6xnF6CbpXLr1r/z5WoLm4MqEQJ4Qvp+vsAChan/1kG3S93xpgYof3PZsrSpxxfGSJq2qBZq5Xd//6CfHdwhdulaciKi32F0GV+DTkDAWTwOOy5fo8IC3bLnWr8rFo3iS0DhETR2V7s1/w6MU/0iuPz95TrBffNvaI9uSehJaQwI4a3Y2M79nxB9xfgHIsbh4+fef8OFa53snckCCzY74Rsv3Th7HliBLVcpAUNvaw5xFnECFkjq/uJVd3cJ3GnYO01InxRqkHm7Bl4RqA0tctpzM98p6RtidTAZ1RHZD3rwgU/oPoV8a32gcmhdRbm8m1/nBXDg2aoSXYJ9NhGtJ2hK+ufsW+szAv240SVX/JH5vk7w7T6H7n6UcZqxYozjAqawP7hUSB/eYfY3uKJIxUdJmGfnDq+L8/d15Pnbqb6zD9qSHi38OfKUTAe8WONWSiziK9EEO5R1EPAdsZod3CFBx0K/TfrBC2mpCZIUUY1HqIDICsDUoFdzj377tLQqcF6K/b0r0sL5rw8L0I6pZiYCCz4LfaBg+oCJwupTqnm1Lusstw1EZP0Psqt+pabj30wA5JPPbo+EB7X5oK6P9N7b/Hw9MpQNNddTvZk0bHI9l5hUZF/rv6TY/qVVCKcAH06bCbQfPvzV9Q6fc+e6/k401zVplq73+WjiqxUWm9iNhrWodXpLWH7Zj3Tcn/mmWNRYUvJE9IccTd+mQ+rvfAM8om66NH68zISbPlDeBuEUIhUlCihpUOerE5j/SasBuTqnrXNz1Z+aR3LT40r4QH2OMEeBR93pPbsZ2l/2zoqL8t685U8B3nimYAE6bwpdn6tErT3MnO2+R6VKIISaUm29Kang6jfDPgPaOZPVXCN05O35Of555TjbSn2XXsh7jqnnp7qW6zUXCcM2Q470yAlQXF9VAXLTI0zKkTVK5b4g0jNs9IFHXelw4vZNM26L5wsTVsvvjW8TpJm8Hkf/Flv3hjLQql21YyAejxRe/vu4ku80Gglwrqyu6wVdZtL28lqZwt0k06z19JuxbTwyck7cSQpMiHg5Ou/0ThqHJdEbCv10d61Be6bZ/kGaqG7mjzX16BjGJamzrRsW+dB96WGipFfLswFka4slB0Bsn5uA9awhNTR9JJyAk+6LvXDg/YigSYiwpXqcOoSPY8KrfBapNussU9oYPqIumdocMGvIzg9MOqpR4Kl9E/ZOyf0gzomIYqdP7elFNnmcxDmuGBwexqO188w2pRIQ7C/GrCwmarMJfe2ZKozmVAbMPaze9B3lLs2gb059tj6WF2xTJd/3HYxbdmUtMeGIrQkxKhFxBY/+bU8M4rhbR5HZiOJIfqko/lAPPQIB9UMGC0yBfGofaZYndHtJAjf9LKLtj3crHAPd1vsS7zyy8rhGkNGFHJNnYgyvYZT1A3eM36W7MlCnVImgENg50uV6xFFKzruiVLTLhF68bfKRKnncxw2sb0dKBGvVcOFm6At7ZgtM8bX2HIlM+7A==,iv:+pnvwKJLNUD+0tpxurFocDgK0qOGzVsYkcV6b6KYock=,tag:oVCamxWlyuQU7McVwxZUKw==,type:str]", 3 + "sops": { 4 + "kms": null, 5 + "gcp_kms": null, 6 + "azure_kv": null, 7 + "hc_vault": null, 8 + "age": [ 9 + { 10 + "recipient": "age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r", 11 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOSEw0c0dWY0JhdGpMVFo1\nc2kzQm1FdHZIaEtuRG4zYUIyU0Z0QmVOdVZFCkpNTFJpTi9ha1VFb2l5czJONnl4\na3lYU1VmNmpBNzNBdVZEMjNRVjF0RG8KLS0tIFRhTEs1RFF0cTRnNTJqbDVJajh5\naG5UWExpVVl5YjZKUUQrT3gxR09CbVkKc64s7ROfryegUfEr+lS1KkbUDJo7+hso\nBvdJ4EJqS1Uu6H2XugpwBco640PKknJABrkL68LdUGlsUsITqK/MFQ==\n-----END AGE ENCRYPTED FILE-----\n" 12 + }, 13 + { 14 + "recipient": "age18p8x2cxam2l0trtpyhj4x9amcppp9ruzkqxzgapy9wnfpzl9hgaqlkht86", 15 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGOFBxeFNVU1RTSUNCOG1B\nZGhZQm1WSjR1NmsrYkpBd3A0M3liNlNEYXdZCkJKUkp3TGRsMzMrZ2RvU1YxVU0y\nMDJGT0dwQzM3T2pHZFplcFozYi9Pek0KLS0tIFlEb3VuaVJ1QlJPRWlVVDJaMnV4\nQzNhNzBuL1JZeFljb1hwMkp6NE9hY0EKtSZY/B+DbKkDW6cof3sjud77Qz+S6qO4\n81N0I13ywjMmLKLE/eXKEwRXvZkTV8o4AfkZIZo+JPvMgXcujrTFzA==\n-----END AGE ENCRYPTED FILE-----\n" 16 + }, 17 + { 18 + "recipient": "age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6", 19 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKMHA0ZHRjU2tYSEZna2ZV\nUjFTRDdMV1B1Ny9YbGlXVmEyRUNuMlRWSDFjClR6cjhHaHVKRFFGWEJHdERZZDRw\nQU9sVC9SNGZUUGxrVUdJWlVwbGpBa1EKLS0tIHYyeWZtS2ZjWTVJZWExTkJWdzFJ\na3NDMUNhSEtiamhIVUV6T2luNjI0S1UKIVHr+P3jpJY/k44EEE1RYB/PQxI4E3lw\n1DdyulRw0CvhuxVoZsINckTjgNIfRSeJlqS2OYEYfHPvqg2xcBNlGg==\n-----END AGE ENCRYPTED FILE-----\n" 20 + }, 21 + { 22 + "recipient": "age1tf0zelmw4lh9gvkl0qycdk83fut9t4q3tfcdzk8cvlyhjp7z0g2q7hklgq", 23 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArRWhuWVNScC9IK0Vya2oz\nZ1JSRERnSmpJVEVNY3VlWnZLcUFESUxVM2dBCjFSdUtEbTVDZ3V1eERja1hnb09I\nWGNLcmNKcW5wOHFIMjJUWTJrTXh4M2MKLS0tIGI2OFh2ak5PTEV4MFZKWjhIVSsv\nZXA1dFFRY2FjVnI1MnE0TUtJemoxTEkKcCGDk5Mj16JL4/fevQCXYuTdY5ZVE2rb\n7nP+oqXXRTQAMVYsWwWIftNjd2XCM43UkTUKetMktGlcBMd/vNh/Xg==\n-----END AGE ENCRYPTED FILE-----\n" 24 + }, 25 + { 26 + "recipient": "age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna", 27 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1RE0rOU1pYWVQOFU0N3da\nd2NmNjlZVWtEdisvcTVJa2ExRzVsK2lFcDNvCnkzb0dTQ1ZkM085VFpLQ09NZXBR\nd2VKNWtmWVp4YVViV2dpeUJyblBoNHcKLS0tIGUybXNsQ2tsaU81MURmKzJ5YThY\nS280YUMyL2JyK2pHMWlRTnNpSjRqNmsKg80xYn2ZE2zjt/t6pSUpXm0umg1+OM3h\niWJzu2RPayXglUc22hIiC08kahueHA+iJ+OPvMkl+NEM0FBMHotGLA==\n-----END AGE ENCRYPTED FILE-----\n" 28 + } 29 + ], 30 + "lastmodified": "2025-03-08T10:28:45Z", 31 + "mac": "ENC[AES256_GCM,data:xbFr0rhkcvO/+fTrGrOLCcmE52QVVxvwEu2Zg2vQ8DIt9aa+8p/aXI5ndY8TDoHsrl27IqZUetTYReXgyNBWuYhCbh6pLlJ/9GBipq+HTtyTuorj/hAREnaWDI049awM9yR6S6jELBSvPfUSKDi8JfBYelO04D9a2VinuAyP8/A=,iv:HzqLaMQbsNhwgBCX2YZj4pNbnLf73hc/IpJ8Hm5+pDQ=,tag:3rBwAgrscRB7hSKKj8ps6Q==,type:str]", 32 + "pgp": null, 33 + "unencrypted_suffix": "_unencrypted", 34 + "version": "3.8.1" 35 + } 36 + }
+36
secrets/users/nmelzer/gitlab
··· 1 + { 2 + "data": "ENC[AES256_GCM,data:Ogl6BZFz2S1TTDdGDckoF2Mb8KD6G+tD1gIKsiiGBJBQFkC62fT/bEPKNEQ1kndIsLQAcsU26tBEn9YhCLyWkeIIcFDSnq58u9La4HVtydpNo8f+jrvWeDqp3lfXPgIMKRUywC499Oa0HtIyUGs5Xf3DuwoaECS/hhNBNUG9gSb2X6iLb0C7mV+Gd66kJf31DX0cm0JFChiwdQyLlxgnxRMeeBeUhXETMQBVPlRtEs1WxUnvn8D8WkHRcZBs+/TRIRaJ3rY7oG62iBAum/UmVBgs3kt5ZfsK9wBkIFuujwd1wVlTZjWkUYnte87G2p2My2khEQX0A9AXatAxRowRUMI/BS7nq51iv4RLGuHEWK/2IOwmfKPShPvUOZsRx+b16GT2/Xeaq5WnIdW2PaBcfYJV4GaLUwFSlsFHq8D1E/DnlD1s3msmoy0IppNwvk4zkK9zdZxoWIhldq1Baa+GpFHhqPjRIgpN9Gd/hulcygvDKr/rrekOiz/xdjBREXvwW2siwnMIr2SfnKLlGYyb+P8KmYXdPgHh2+X8k767b6fzQ6WmoqzeXVlsLtjPHK32nOz0T5eilQYrL5oC1Mi0u+4wmD8QiIS7KvMC/pU6B5lCb0yjpsdLET5gbQ5Xqo0vn4inftGMwHl7HoQbB9bokHhCmZSoI7DQCUjIYlKCHR5we46IZv55RzLCkmMpBlHCjhqn6nK08+Kj34jl65BBx1BjUR/digio29VhCgL8NwYgwk1k2YABVuFJFnCERBPiDLpL9v0zTQzB1Z8qfFpwxmLw/e/4UbqhPl7z2uhlFMkMjF01kgqBpZNzXTEwUm+kWegURdGdo+XJhHs634QuCZKsKExODCw4Lgl5jUCBgSxHYdnqzyN1MH9ws6xrvywAMmzTwMX19gb3q/NGijlX/Ipt5hrOGlmteNuhepW4KVuTanxhdtRfU9CeSBsHxabZkglkl2tQhfaXoW1OwE/Sp/NF4pYfxy09kOqH/c+Yp2j9WGyxrLTnNlS5XNPY+NCVDk31/zQno2hV77EbXK7pW10TThlu0iNOa2X0OhkJEZV9nWhN8QeKwN/Xao8F29JZ0WDYmcXMWrTPAmSsDob2SnQwgEvRpmxxtuum53IYnTxdGZGpL7DBWLdKZBMsJ9bP5vgeHClSHPyjpro1zK4VhxW/U6Yzpi3PCEyx+KpV/v8sG1DnvSReYd5RHga+p2ekYE8zWD0BzeNfvucroKMFcX2erZHYBKliMuAM85jXLXEohMhoOVdLm/1gAPt49LJnz2QFaU91G89QRxSjXaIqNjZdCDM/jE4Oa3qx3P7QtBzKzS9q6EYjvKzoFlo8I33X7CpAZ0PZuJttD3jDLHmmoOaVnIiquq0I7ESBjIbCtzjuerhDEhkaQDlHPUlFthK5Dg21/cPUbKL1xrZLYoOC6UfWa0lkayz8m7+o6NQAEJYJmvGd4pWVPoHPuYKCtmXWHeNNH8GIcGLvwUe87F5LeC/QFe+oPix8FHOfjZS3vzQRTDdEp057UewWMvodChFnZV+73rl1WOHhqGWghi58ghIY7pkhzj76lrMBhRq8ryyefrDq00uVYntoIbetxwH/GducP7JBvNPbFVvRn4/n3u6/3/0ZrdzyuXKtgwW17YP6UOexvQmkzgyBnTVs+JW1hnS/BToIliMtBg6KlUXcQR+0X+6hLF5mms1oPmX7wH1sC01iMKpt/jpnfIhq5tjySaebCahjqDJ7XC3HuvBjCvGmVpLYFWBjJoUX8fnPcaVI50zUtwqofF0BPcsSCg5U8S9vjVB61A9mTqOcH/6p5lThL/8yAii76XRn+tLA8UoabuQs+Z1bPb6DowkMnmT93Ye22NRX6fxFrXyJCr0puRkh2Qn9xbPmcIwx3CxRhO4DmBivtVtZtmYhoxYvcs3dNV/ergk6O7FKwM+q8c6Ia363GAhATHJkNyjxmDZRvaSY7v9CeqMyFmGobp0ZohWyfgXRuMO20CU9Ub7VdIct1mgMslhYSOfW4UStc66tGvozsMdyvnCo5lzjQUBHxOq93HxkSTedP9FB03WFyVWZEH2++nYyc3IsExGnq7ce6YQwL5rPThMNw5Ur09zrf4aX9Rl4mQJaMQyQWES9BfO0fDRIMciZXwWW0FDSlMCeBwesQwlnBpVIjPixsy8r09LMd3LxxPw1pt7vtfJh1R+6y4ye8/1VdVsGBp6AFLTvpaYW/aZUFAr8SP/mVYhlfms=,iv:wutx8cOVSjjC69NzlIrojwRLhs28QvNXRnRJSC6MMb0=,tag:cPf78d+51Op/58UiaM8IqQ==,type:str]", 3 + "sops": { 4 + "kms": null, 5 + "gcp_kms": null, 6 + "azure_kv": null, 7 + "hc_vault": null, 8 + "age": [ 9 + { 10 + "recipient": "age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r", 11 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJc1N0MUNwVFNlTEdjUElq\nUWlsTG8vc2xQYitYNWlUTlRGRTVLVzRyY1dBCmlMVG9OcUU5bjhzNDhpWStDaWVn\nRTcxZ1QySFhabklhQzJKL3BqSVVydncKLS0tIGhIamdINjdJZERnbXowZTlNRGtY\nOVVJSEZ1Q2NNNXNXV3UrbldUTy8yTlUKeLwquuhjLHDwzzL8JERFELXD9b6HWlKD\n6YXv+mHaeKtcN0y61uzH2O51U13e79ipex9AeYj8YSIZx1DRiJAg5Q==\n-----END AGE ENCRYPTED FILE-----\n" 12 + }, 13 + { 14 + "recipient": "age18p8x2cxam2l0trtpyhj4x9amcppp9ruzkqxzgapy9wnfpzl9hgaqlkht86", 15 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlU2tFSTgwSXFyVEo4YVdO\naUx5R2F3UGxhY0RBbStMNDdpMWZCdkVzMEc4CmcwOVVFbDBGRlZDS3dhdGZNNUtI\nWWNCRDRUelhvVzA2ZFIwZ09QYUhZWk0KLS0tIDRORmpMZk5CcDdOL2pvMW51clA2\naFpFS1k2dW9rY1dQR2hwb2FlMWVrREUKL3F0eiR8lKlDfQMYekRvxUo/c/qDVgKJ\nl5+yOsCMh6iu2u696gRcrnzrZ/aX23TJE98ttYS97DeUjUCc0Dpo1w==\n-----END AGE ENCRYPTED FILE-----\n" 16 + }, 17 + { 18 + "recipient": "age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6", 19 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHcUhZOU9kQ1FkMWY4TkdS\neStwOThKdkpWa04xYUU4MENrbjZRQ29ya3pZCkpqaHRGeVUyeGdDemZUeXNkMlo5\nTkg3dFNlL3c1NWJNS1FzWUJ3b3FSYkkKLS0tIG9aUkxYTTVDRitCWTh1TmRFMXoy\nU3p6RHk4cUVOOTlDamNSZFdIVmc3STQKdvB/aVmyKhVAA+JKT8aQo1VmDa2WhGl7\nzGIGX77gsjDiy9Jb15Z3KWGu4AP+bonUTmTkUWA5Oiqe1rhOe9MDMA==\n-----END AGE ENCRYPTED FILE-----\n" 20 + }, 21 + { 22 + "recipient": "age1tf0zelmw4lh9gvkl0qycdk83fut9t4q3tfcdzk8cvlyhjp7z0g2q7hklgq", 23 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaNWhBaWQycm1EZ0JwKzIv\nSit2UjFhNUsrd00wSzhua2xONXZwZlA1WjMwCk80WG5acXNGTkFEdmxyYlRCNlIv\nc05CY0RQM3Z0ZXZNTkswOXVsaVcwS0EKLS0tIHBrNnpZbFRpY1BuMm5ocnlYWXNZ\nTXdBMkhROGxBM0R1MDdPNHhKM1NYYVUKjZaHwqh/0OKB+ybatAfxEF4OmskYW2E9\nYEjuhy9jdcqi2a3hm2bI6rdSCsemAADJPW2PWsqjNc2TB9QeAK9ZgQ==\n-----END AGE ENCRYPTED FILE-----\n" 24 + }, 25 + { 26 + "recipient": "age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna", 27 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTUEJ4ZjV5aUhLNUVxNlZp\nY1N1WUEwNE5odUQ2ZkdqdFV5cjB6WW1LWkRNCndObExzUDB4ZFdsYVVNbUtBbFE2\nSU5kZy9iK3RlY3FLWXFrR1pzZmhYOU0KLS0tIG04dm85SGtMQmZmT2RqTGYyRWlS\nTVhCRVUwWGhUaGdpUExPVjIxUVl1ZzQKkcnzuMCngr9oWFDynRENTlJQEFIbRJV/\nY8THko3rajg5QrIcoDTHeQ85WM6ucapUakAUTbis+Sa9xBoQ2coqDg==\n-----END AGE ENCRYPTED FILE-----\n" 28 + } 29 + ], 30 + "lastmodified": "2025-03-08T10:28:45Z", 31 + "mac": "ENC[AES256_GCM,data:1Y93EdZwSxZ3u+F0umtNc0jxzHHR7CdF2OUDb+DhxhmJrt9dEBoK1pRAN2qkdTMRMu5SDZVh0oilbQQC8HSC0iegpvlJo7lkG/qXyo1ixqEdp/P+mjqZTRqyxt2F/fFTPU9ggXhpQKyJcDgV6fjGm1pyYcTSMsvm0hOyrFq2+fE=,iv:rBYnAsB8PFoK2y0rb3G8YgX7e0yACTSE/AO1fYoRV8Q=,tag:TR6ZqCdPll7zPVSL/qUTzg==,type:str]", 32 + "pgp": null, 33 + "unencrypted_suffix": "_unencrypted", 34 + "version": "3.8.1" 35 + } 36 + }
+36
secrets/users/nmelzer/nix-community
··· 1 + { 2 + "data": "ENC[AES256_GCM,data:beYSt9kq8a7NhS+FQcWQFFz0AjJP+Ybz1o5tYhAXkFo88OlxooLKCEpFgSDmN8jKgoE/IItxuLNVJJmPmo7+QUbQZgZq2Gs5xE5Am40ckfWc5vdGshxa5cPFqt1v+Sq/D6+oMj+8wxRC8zbUXGAH7Pah9Zaht/O/8gYcdnuypokYz6iKn9J713JbKAUHNNK358UUQhkEuVHWIgsWjbe6FylP+GlNtziYm2d4FwhAebuoOmZx3prQidP2qAcuul/FWjvRa5tJX3mEEa/oA1z44Q54jkPyWHvaMbsXMwdmq/3iFL26pMMZJl7FrM5OjfcxsTPNFHZFe9zonVWzffvdgu3KDpNcGTDK2OZRbOszr6kXy3BZYkzt/EMHoqH75mJ+WNCaGIZ41c3MMWBjEr0AkDLrLWA59EcVAJdH0WQ0TaVUErncLG6kR9UfGTMNm6dFs50IJy0PfGISHAKrnNL+2NkAdEVKlhHouP/0nlCqgB9Zg33nWzHniP7e4j2yDz6jfIkoIUjBHuwYPh44MEFE,iv:liL/qeyXe5Wbm3WtMCR8iIUk0O7gdIqYTOS9sBJSyqo=,tag:pkKFZEKNNBvl3/SfjH2nwQ==,type:str]", 3 + "sops": { 4 + "kms": null, 5 + "gcp_kms": null, 6 + "azure_kv": null, 7 + "hc_vault": null, 8 + "age": [ 9 + { 10 + "recipient": "age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r", 11 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtZ2c0aUJiRENZM1FNamJX\ndElNRmNsdlRBMFZNeG5vRHdVcjFyWEhYTnhBClJEbWF4ZFkxM3NoS0hXS2tnaTJY\nM29oY2xzQldidzdBcE54c2pTdkhCNncKLS0tIEFLNC94aUZmUkdLc09oSEkrb0VS\nM29wT2h4SEdjUE9CMWtFMmYwSHVSaUEKN9MEDf76Wa5JNjk0DSy8MExMDjyxhpSu\nBCPeuJpyYqac2vpwc09ttV4vqbzRzrGHlMGPpgFkgkYvvzX5lqehkQ==\n-----END AGE ENCRYPTED FILE-----\n" 12 + }, 13 + { 14 + "recipient": "age18p8x2cxam2l0trtpyhj4x9amcppp9ruzkqxzgapy9wnfpzl9hgaqlkht86", 15 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXeGZtQ2xERDlxd3l1TzFW\nTFhmRDJnOUJxUW0vemtZM1FORCsyMHFyTkJFCmtvR3I4eWhuSjFrNTJDdkd4Z29k\nRkt4eHM0aWVtNTZuc2txVGNKc2N1SDQKLS0tIEZ4bE5qU3hSSGpXb3lGWHp6MGti\nb2QzWDRYRmluWDllTVNJNmJaMlMxZDAKB0LOonMk7ypELophUHLnR2eEOclM5CgD\nrbgkmmKZPXMSvXLXDoQDICxleDNoFD2mWi4JvwZWZuRpaNs/1KPraw==\n-----END AGE ENCRYPTED FILE-----\n" 16 + }, 17 + { 18 + "recipient": "age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6", 19 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGdTVoVUI4UzM1VmlTZWVy\nblZxZE04TmIxaU1zOGhrREh6NnJaaTIwSjBBClFHejZwdHlFRTQyMC9YOFFsczhI\nMjh6cjJzcklFUGlHV1p6TnJUdzNPVGsKLS0tIFVQTDI1K0Jydno1ZVgrN2p2aDdi\nQ01mR3lNVzRmSEptQklBR0tIbWR0WE0KKND3aAMOLmMLjQV4iexO+XnjZIgZSSOj\nbK3qtICJ7E9lcRgoXtHDJm6+e5BzpBOUVkfX7cKAEWWtbfwrHbYnyA==\n-----END AGE ENCRYPTED FILE-----\n" 20 + }, 21 + { 22 + "recipient": "age1tf0zelmw4lh9gvkl0qycdk83fut9t4q3tfcdzk8cvlyhjp7z0g2q7hklgq", 23 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYZTVyRU9DQmNIRm1HWDQy\nUmhQUGVPM21ldGhCSzMydGpMK2JBdUNZU1JrCkpTa1krT1haWGo3OEdnLzFQZzh5\nTkFYb21JZjhGdmZxTjU1U1hRU0hkaGMKLS0tIDl0M3NaeE0vOTlTU0psSnVpYUw1\nYUE3ZGxXUmk0WUZmWUlQdjJNMTRBclEKPCZVzELeRe9jUC+dY/LTFrk0yrk4uWn0\nhNCROYc6jQPAHLhYRnCbWkENCQHfhBrxVLeyzLmELoU5ZdM0KgtPyA==\n-----END AGE ENCRYPTED FILE-----\n" 24 + }, 25 + { 26 + "recipient": "age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna", 27 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3aU02ZFlIcDFpUXU5ZUg3\nUFZTR0Uya2JDUkw5L29tK3d2cmg2N05XVFRJClZnWVpwVHo3cFp2b0h3QVh0Wk15\nWGFOclBuQVMvcVdMcklGOUVST2JGYVkKLS0tIHFrRUl1aW1OZ1Z2SkF5K3FMRmFu\nQXlDZjdlWVFVZWEzaXN5NnNFc25iRkUKk6/f0mFEON/gplXSDCviVm4+e+duQJlw\nBT1oJflU2VHXK9RJBiUl9sV3tGHF41MeXpt3WoEO1AKMsk8Q3Q++1w==\n-----END AGE ENCRYPTED FILE-----\n" 28 + } 29 + ], 30 + "lastmodified": "2025-03-08T10:28:45Z", 31 + "mac": "ENC[AES256_GCM,data:yenOYHB/Eax95Z8YqLd2kWq6bHUIbDXHj/qQntzLgLmBTUpnWW4DKuyligR3iBH91WD4evWBc+bDU5sMfGuozDQpgynsoIjPiOsNXPlLOURZLQf4tnqPzd4VzSkWsH2Q+b5bQvEteqYwYt9EI0XUxOfIF0X10yrjCM6axV6bsu8=,iv:du8kmJ2P/33SsLOih+5oCMrdvIEgWsFEC4ys51ASLJ4=,tag:4jsUew+WAfIj6pAUTGymLg==,type:str]", 32 + "pgp": null, 33 + "unencrypted_suffix": "_unencrypted", 34 + "version": "3.9.2" 35 + } 36 + }
+36
secrets/users/nmelzer/nobbz_dev
··· 1 + { 2 + "data": "ENC[AES256_GCM,data:JbATH1rQff0rUhJUxXAKwqq+KO8hjLXnwp6uwBwCpQXK1OAD88l/4StWTZ94oSqUwcwjT8DtI2M0DLFdGFQTmmQrrt/Or8XKHnZc1zu5axgJ8H/Ey3m+CFDgz6Wg9rOuc1nz0EBTBk6XIGvyeXc4AMMfUuVDo14ijarTL34JqPy4sB0ayzCGCWZTyxy0VKQoQnYQBK5D2JTqG4P2IjFY4yh/2R+IRmK+MghErz3gKg5ORKPfIqH4rFAszGbUjYZt9TKpVGiidW2lYVn0nqVHHzMgZGokst+jkrcriKQS4CLLLk/zh0Dx0fHo1QrJyRYzry5cFFQVCQZKyTe3nbkuExPbxfm13hROCC7jK+XYgn6T+MowJ4u6/B6F//UgjTLQ9by58lhbG7N1IUbXcgGYpWYib9bavF1ELk2PXdazP+WQJTQXMYT/f++eT80m6PdPbmHVbm1cjVD22SjnMa8g695eTUcvx8jwFbTKVEkE9kMEMOlAG6hVvf6/+8G+xvoCYXu/C35/mf9k6n62ii5QkoPiqT5yKKiGv/GXht+24d9NQGX4f1CF4p/6s3yRfKaOnnOF2MLseY8eYGrlLdGqdr3QWet0cAcraTXP62OH3gBBPhTW0U4N0EciBsX3/9atVxoiq4y9C/SQOYla6MIRRK6NTrWlWLCRif/MOBja+Ya7BG3s51umZgS8v3uPL9OyjpWutRpYvBPkherfHpKKzUUNJx+o/2De0yFtQx659bVddBQ1dBmJPjYkUbSzQBJE767pEyZf1oac88SC0wizxPFLDcI7ZzFvQlO9XYs5pgoO9aZKqYDx97rT6BJeOyUmLE4XhURliQtpL18fRqIqHu6SoAQoLZpjLx9A5JUHyI2iem7FyZJKFVeA/bL1hdXL1hby/VpnuP3PmbGP90Y4FOHPozUsLgBLObqbgf6SMKZBEs7JWWEK4i9A1uYbv7LIvxslqYvB+qwdCDEa+tFfz8TG9pBerJ2oqCpaNbO0UGruvpwJ7HXSpn4VdAXgG5zy4glupIqkGUNoERpYEVJMRZxx4K8ST9OZ+0qwpAOOTXTwYuqkcEw5TNwcoNswUNzu9Ck2/An0307fhOYXjO0D8IDvTDIF5CSESILjASB5H7qhbR4hbUE4G09fIChKi6DLyTP/zMAwWpgUBwxByZGMrttH+EzntFNbgL2EGbbdCfr8Vf7XWHhXT/bNYhlGJp2dkdOOBnV3XdPMIkyl4zJqzzAFySx4cpFTfCQ/zwWOEQN7H58sEsqcUxeYOtnSwccWkuP0+9Z4nrdJrAjq32RLeLSzTJ8cMStB85E3h/Gqx+O0Jw9fA+H4sE49JGkIobiuioz0wC/6uMQvyMBs5cyDvpiWFQ3dj2bKgpCtBVrAlcNG1Q8Hljc55WblkFiQRxVix1xB13yCpFMeNuIdCifGXUbTWuA64H4QjG5/P5KgH5IkT6Ry0wDPGw7CSqMXCXhCiRLsyzByGfy+LMkjL4LZk8GP21+6NlUkc+5j+cNZkjZ22J5LhxIdz4eE7MXSMKTno0iMrvUKYPJe0+NgIrXtprsacHLDyDSXowS3FUPWqPfPLG6vOBfz+99DMumFY1UU6eHSdFHVovBdp50kHnu3LbsiNh4iNvl8rtctgVl7PGRMvU+tF4GtiIrxHt0MRZzQ6WemRVvRIvZBYMXEEjn5p6Xn9Lg5p9HjsnvpjdmJOZCp4CCwYrkm9kzk+f2qwPVy/J6DQBwgr41k0Pd8fbCQjdICkGSU8yJxwCsWvP5I2T5NWrPiUdav0doc2i5fEi02NnDcL1ncChBooqrVjD0mLIbQ9ra9F+f+51RGZO+Y7XjfFH8E2uUb8GS3u/bZbhmoCvouVKHLurOCcmFfs14ZGek0bZT7Q+PHChWzv890MkA1S5A3x9orY6WmhR4Zy86Bsi9PA3YNL59jUQTl0nWknbrxuhPdPcsmCL+DgdSV7E5zesUaeRJi7QuL/GCZ2E8PKKSuh9Kq56pYk8HsYMsrqNqyU80QM8aRc1o++YSq6SLwEmY1Pm8fsssZTjP9PT2RZIXt5LjskQbkA4Q4rECm4JQepx9jHZeFAgo0tDOfAmj7q1QQq3bxEfvRO1dxJ212tvcFpR5ehDO8d4CLyTMqprBvG9/0r2qO8xp7ifJQKHx4CDpiiZaNS9Fyl1QdfqADvrT9z15ucRsmoQuL5zjVdbC05lAie4wswlcOUUvu3qoj6RikDC+xFG6AXd+e33un1v9rT2XmVzz+47WKPCQLfRqCDkNgwpjxUkrgCsiFun3+EhzWxLxzXLIEkVfE8c7eJnQSDu3IEShZ2vF2sT5FFJScN8tf888J7mCgLsHpnWbSplXxa4RMjO1rHD1S04tLC80EPGl/rdaraHmnEtt4mc9boo7IyusR19gotEjRRnZDZJaplDt72IdgC6hBCQM=,iv:iwfQiWkkxmB52x5mVXlhS3pbzKL3/ctoJMctdhHGQuk=,tag:VQ0GWz0xyQiCx/WpYq1itA==,type:str]", 3 + "sops": { 4 + "kms": null, 5 + "gcp_kms": null, 6 + "azure_kv": null, 7 + "hc_vault": null, 8 + "age": [ 9 + { 10 + "recipient": "age1wpwkf2g475umw3wwns57r8ucykvy6lflpc7uphs0mx9exsj04quqpy7t6r", 11 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtQUpwZ2JXYTUybXc5Tm9T\na1p6azYvbno0NzY0UGNrWnNjQUd3SnJMakV3CjVMemhwQ3NmOWFJSGEzQ2ZsL1pF\najgrM2g2THQ2dkxTUUM0QlpnODRjbUkKLS0tIDZKaFYydnZRYWdxZFIzYnNZbjZ3\nWkxPcWdHbm9ZZnZNNVpIQmZ5djVHTGcKAiKFm4r93FBNXxt/jgofvKS3pn0NbdWW\njDacQ7VUubSqpmHax/s/FNV75g5ynIm8ldOJVoW6lgNxPWxcfucTLA==\n-----END AGE ENCRYPTED FILE-----\n" 12 + }, 13 + { 14 + "recipient": "age18p8x2cxam2l0trtpyhj4x9amcppp9ruzkqxzgapy9wnfpzl9hgaqlkht86", 15 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLMU5ycnhZSlJyQ0UrRXVo\naVIra1o2TkRmbTFFMHFzeTN2d1NGQUluTVRzCk4wRm41Sy8rNWh4OXI0eUdKdDhH\nRjZwcE80K1NUbGxubGp1akh1WVFTWU0KLS0tIFZraWFpdmU3dlRCMnVtMHN3RnFD\nYmN5dmIwRUlJQktKTmUzZllTb1lOUTQKkJLBrTeUlPaZ1C/pGWu9WQNFCBgsJVqS\nYnPpsvYJiOE/6WmCzB34OVpO8vdrv1mE5jR/Ila3YQVjBt8JHo7Zqw==\n-----END AGE ENCRYPTED FILE-----\n" 16 + }, 17 + { 18 + "recipient": "age1w6xjgskpxnlpleswumdhtt7x8zx35qn329yz3x7ftqdcmcxrrvnqnuf9d6", 19 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVUEx6UkEveUI1UVRqQm1n\ncE9OcFNnZFM4eU5iM2NpQjQ5R0NteFZOMlhZCk1Kd3JxVy9tTk5oTU1GSUgyTjNO\nY1hmaTZjYmZkZHVnazl3Q1ViT1R6RVUKLS0tIE9udElPWU9vNWpYYWtmMmluTWQ2\nK0hWL25OemxpVStNMFZJUGI4UUc4MmsKs7DTAfnY74yp33cmdyYiF6fPiNgheehm\nRO9PDQ/Yh6wIq/6j/brPsMJLyYrC7+Mjgx/oX5lNmMwTVLBrCe/qdg==\n-----END AGE ENCRYPTED FILE-----\n" 20 + }, 21 + { 22 + "recipient": "age1tf0zelmw4lh9gvkl0qycdk83fut9t4q3tfcdzk8cvlyhjp7z0g2q7hklgq", 23 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqVW5aVUVpZk14U1pYK2NJ\nRVpGbGdXVzlLQ25PSWYyWjR6bGRCWkIxM3dVCnlGd1h3Z2pJNmNweTgwRmUyL1Bo\nNVBoaFprQWVUK1pQbi9YOTgreFBpcDgKLS0tIFhCUE5WQ2w4R3J1eXVhSFJEOGRp\nMlZpSnovWnpvc3lGemE3WmJkK2xQWVkKkNZaVbq8X99+MXfei0BzbXBwzibERWvR\nV26mOEEYcfv/3/KqCLOjBVCLEE3RSuB9AtniAAFC6Fj0/jHnMzaghQ==\n-----END AGE ENCRYPTED FILE-----\n" 24 + }, 25 + { 26 + "recipient": "age1vr0uq6mwv844yvm8pe7qxjxpqrekgel3lqfzuuqtfzj0ehz3hphqzsxjna", 27 + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQdlIzc3NQM2JkdW1TQzVX\nYVRjR2hEY3NrME9GeHJhbitpQURVbUdoTWlrCm81Wmt5dWpWWlVtaHJKcnNnMVJm\nekZnM0gycDdlZi9ZdUhYMTRpTFhjK28KLS0tIHcrcFQ3SEphOW1oeEsvcDdBUFRI\nU1psVWVldkZ0TXp3QnBmMUxHdm1ocmsKn/oYX+0hYRZvC32KGQ9hNRDMdlxclv5x\nekDM5wPeI9wT/j62bxmykEtNnI40WEpEopz7MSZvRnj6B8zF9boFPw==\n-----END AGE ENCRYPTED FILE-----\n" 28 + } 29 + ], 30 + "lastmodified": "2025-03-08T10:28:45Z", 31 + "mac": "ENC[AES256_GCM,data:7XBQhTfVn9Uq4ZjjpLdMyvw+kDhIJ+dUEjI1j7Lq8QzoxLN7kqWyrotavl4T7x3kbhGseqA/RtuldK5cvw90OK7FVvWD0H5WSsxDCG2zuNRCELmiOEM8O4Iw47J6ye3wY9F+05F7ggG/GrZGJK09YojuZyek4G+/slHfp/Zgxy0=,iv:vAqJx7GT28f4wC0iH0w+K/HRywJlMb6/N/5Lb1/4q80=,tag:L3odjAh/IWuddrzg7vP/Sg==,type:str]", 32 + "pgp": null, 33 + "unencrypted_suffix": "_unencrypted", 34 + "version": "3.8.1" 35 + } 36 + }
+3
statix.toml
··· 1 + disabled = ["repeated_keys"] 2 + nix_version = '2.4' 3 + ignore = ['.direnv', "packages/nodePackages/node-env.nix", "npins/default.nix"]