Compare commits
68 commits
workflow-c
...
main
Author | SHA1 | Date | |
---|---|---|---|
a7de77a0fc | |||
1b298adbf6 | |||
1cf31a7ae0 | |||
f3f15724d2 | |||
4f1bd26064 | |||
e38ed0e6f1 | |||
5a053b2379 | |||
eb054c444a | |||
2591401aa3 | |||
c193ba2108 | |||
140f0f5dcf | |||
4188e4aa83 | |||
44a98fd703 | |||
f5af830c30 | |||
b3f1d10575 | |||
61a4f97684 | |||
71657e0ccb | |||
e2df47ab99 | |||
c806ffb3bb | |||
21399aaf47 | |||
40d0a1512d | |||
68d6fcc45e | |||
904cecde76 | |||
e678d56cad | |||
2001228889 | |||
cad11e55f1 | |||
d9e6995b92 | |||
a4bd232336 | |||
2b39a5ab53 | |||
9c859e23e6 | |||
895052fb20 | |||
f7157a11ed | |||
8ead8c14e3 | |||
7c180248fb | |||
2568f72923 | |||
2c9d24f06a | |||
160f89b423 | |||
541d625c8e | |||
afda7622de | |||
d3c61ac0df | |||
912cde0be4 | |||
a61c7fbf50 | |||
d6186b23ee | |||
f6b7c0d3a1 | |||
22cc5aed31 | |||
2f1b064d59 | |||
f894fdb61c | |||
9bab705962 | |||
f072b33fe2 | |||
7653df7715 | |||
026abe5123 | |||
|
da709432f5 | ||
6a3a5d0cfd | |||
97da2848c6 | |||
0db4f4c4ab | |||
35638117ab | |||
de4797cf06 | |||
ecc20e71f3 | |||
|
08a75b8b8f | ||
16848e291e | |||
897fd44bad | |||
67f6032b67 | |||
f34eec7b17 | |||
925f78853b | |||
ec978a406d | |||
616d291030 | |||
c6999339da | |||
1537fd6444 |
43 changed files with 755 additions and 1523 deletions
116
.github/workflows/build-machines-and-homes.yml
vendored
116
.github/workflows/build-machines-and-homes.yml
vendored
|
@ -5,18 +5,11 @@ on:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
|
|
||||||
NIX_CONFIG: |
|
|
||||||
show-trace = true
|
|
||||||
experimental-features = nix-command flakes
|
|
||||||
accept-flake-config = true
|
|
||||||
system-features = nixos-test benchmark big-parallel kvm
|
|
||||||
secret-key-files = /home/runner/cache-priv-key.pem
|
|
||||||
extra-substituters = https://nixcache.cy7.sh
|
|
||||||
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
|
||||||
TERM: ansi
|
TERM: ansi
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
|
||||||
|
AWS_DEFAULT_REGION: us-east-1
|
||||||
|
AWS_ENDPOINT_URL: https://s3.cy7.sh
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-machines:
|
build-machines:
|
||||||
|
@ -44,38 +37,44 @@ jobs:
|
||||||
build-mount-path: /nix
|
build-mount-path: /nix
|
||||||
|
|
||||||
- name: setup binary cache key
|
- name: setup binary cache key
|
||||||
run: echo "${{ secrets.NIX_CACHE_SECRET_KEY }}" >> /home/runner/cache-priv-key.pem
|
run: echo -n "${{ secrets.NIX_CACHE_SECRET_KEY }}" | xxd -p -r > ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
|
||||||
- name: Install Nix
|
|
||||||
uses: cachix/install-nix-action@v30
|
|
||||||
|
|
||||||
- name: Install Lix
|
|
||||||
run: |
|
|
||||||
sudo --preserve-env=PATH $(which nix) run \
|
|
||||||
--experimental-features "nix-command flakes" \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" \
|
|
||||||
'git+https://git.lix.systems/lix-project/lix?ref=refs/tags/2.92.0' -- \
|
|
||||||
upgrade-nix \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o="
|
|
||||||
nix --version
|
|
||||||
|
|
||||||
- name: Sync repository
|
- name: Sync repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: post-build-hook
|
||||||
|
run: |
|
||||||
|
sudo mkdir -p /etc/nix
|
||||||
|
sudo cp ci/upload-to-cache.sh /etc/nix/
|
||||||
|
sudo chmod +x /etc/nix/upload-to-cache.sh
|
||||||
|
|
||||||
|
- name: setup s3 credentials
|
||||||
|
run: |
|
||||||
|
sudo mkdir /root/.aws
|
||||||
|
echo "[default]" |sudo tee /root/.aws/config |sudo tee /root/.aws/credentials
|
||||||
|
echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" |sudo tee -a /root/.aws/credentials
|
||||||
|
echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" |sudo tee -a /root/.aws/credentials
|
||||||
|
echo "endpoint_url=$AWS_ENDPOINT_URL" |sudo tee -a /root/.aws/config
|
||||||
|
|
||||||
|
- name: Install Nix
|
||||||
|
uses: cachix/install-nix-action@v30
|
||||||
|
with:
|
||||||
|
enable_kvm: true
|
||||||
|
extra_nix_config: |
|
||||||
|
show-trace = true
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
accept-flake-config = true
|
||||||
|
system-features = nixos-test benchmark big-parallel kvm
|
||||||
|
secret-key-files = ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
extra-substituters = https://nixcache.cy7.sh
|
||||||
|
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
||||||
|
post-build-hook = /etc/nix/upload-to-cache.sh
|
||||||
|
|
||||||
- name: build
|
- name: build
|
||||||
run: |
|
run: |
|
||||||
package=".#nixosConfigurations."${{ matrix.machine }}".config.system.build.toplevel"
|
nix run nixpkgs#nixos-rebuild build -- -L --flake ".#${{ matrix.machine }}"
|
||||||
nix build -L "$package"
|
|
||||||
|
|
||||||
- name: cache
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
package=".#nixosConfigurations."${{ matrix.machine }}".config.system.build.toplevel"
|
|
||||||
nix copy -j8 \
|
|
||||||
--to 's3://nixcache?endpoint=s3.cy7.sh&secret-key=/home/runner/cache-priv-key.pem' \
|
|
||||||
$(nix path-info --recursive --derivation "$package" |sed 's/\.drv$/.drv^*/')
|
|
||||||
|
|
||||||
build-homes:
|
build-homes:
|
||||||
strategy:
|
strategy:
|
||||||
|
@ -103,35 +102,42 @@ jobs:
|
||||||
build-mount-path: /nix
|
build-mount-path: /nix
|
||||||
|
|
||||||
- name: setup binary cache key
|
- name: setup binary cache key
|
||||||
run: echo "${{ secrets.NIX_CACHE_SECRET_KEY }}" >> /home/runner/cache-priv-key.pem
|
run: echo -n "${{ secrets.NIX_CACHE_SECRET_KEY }}" | xxd -p -r > ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
|
||||||
- name: Install Nix
|
|
||||||
uses: cachix/install-nix-action@v30
|
|
||||||
|
|
||||||
- name: Install Lix
|
|
||||||
run: |
|
|
||||||
sudo --preserve-env=PATH $(which nix) run \
|
|
||||||
--experimental-features "nix-command flakes" \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" \
|
|
||||||
'git+https://git.lix.systems/lix-project/lix?ref=refs/tags/2.92.0' -- \
|
|
||||||
upgrade-nix \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o="
|
|
||||||
nix --version
|
|
||||||
|
|
||||||
- name: Sync repository
|
- name: Sync repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: post-build-hook
|
||||||
|
run: |
|
||||||
|
sudo mkdir -p /etc/nix
|
||||||
|
sudo cp ci/upload-to-cache.sh /etc/nix/
|
||||||
|
sudo chmod +x /etc/nix/upload-to-cache.sh
|
||||||
|
|
||||||
|
- name: setup s3 credentials
|
||||||
|
run: |
|
||||||
|
sudo mkdir /root/.aws
|
||||||
|
echo "[default]" |sudo tee /root/.aws/config |sudo tee /root/.aws/credentials
|
||||||
|
echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" |sudo tee -a /root/.aws/credentials
|
||||||
|
echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" |sudo tee -a /root/.aws/credentials
|
||||||
|
echo "endpoint_url=$AWS_ENDPOINT_URL" |sudo tee -a /root/.aws/config
|
||||||
|
|
||||||
|
- name: Install Nix
|
||||||
|
uses: cachix/install-nix-action@v30
|
||||||
|
with:
|
||||||
|
enable_kvm: true
|
||||||
|
extra_nix_config: |
|
||||||
|
show-trace = true
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
accept-flake-config = true
|
||||||
|
system-features = nixos-test benchmark big-parallel kvm
|
||||||
|
secret-key-files = ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
extra-substituters = https://nixcache.cy7.sh
|
||||||
|
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
||||||
|
post-build-hook = /etc/nix/upload-to-cache.sh
|
||||||
|
|
||||||
- name: build
|
- name: build
|
||||||
run: |
|
run: |
|
||||||
package=".#homeConfigurations."${{ matrix.home }}".activationPackage"
|
package=".#homeConfigurations."${{ matrix.home }}".activationPackage"
|
||||||
nix build -L "$package"
|
nix build -L "$package"
|
||||||
|
|
||||||
- name: cache
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
package=".#homeConfigurations."${{ matrix.home }}".activationPackage"
|
|
||||||
nix copy -j8 \
|
|
||||||
--to 's3://nixcache?endpoint=s3.cy7.sh&secret-key=/home/runner/cache-priv-key.pem' \
|
|
||||||
$(nix path-info --recursive --derivation "$package" |sed 's/\.drv$/.drv^*/')
|
|
||||||
|
|
51
.github/workflows/build-packages.yml
vendored
51
.github/workflows/build-packages.yml
vendored
|
@ -8,17 +8,11 @@ on:
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
env:
|
env:
|
||||||
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
|
|
||||||
NIX_CONFIG: |
|
|
||||||
show-trace = true
|
|
||||||
experimental-features = nix-command flakes
|
|
||||||
accept-flake-config = true
|
|
||||||
secret-key-files = /home/runner/cache-priv-key.pem
|
|
||||||
extra-substituters = https://nixcache.cy7.sh
|
|
||||||
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
|
||||||
TERM: ansi
|
TERM: ansi
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets. AWS_SECRET_ACCESS_KEY }}
|
||||||
|
AWS_DEFAULT_REGION: us-east-1
|
||||||
|
AWS_ENDPOINT_URL: https://s3.cy7.sh
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-packages:
|
build-packages:
|
||||||
|
@ -30,40 +24,39 @@ jobs:
|
||||||
os:
|
os:
|
||||||
- ubuntu-latest
|
- ubuntu-latest
|
||||||
- ubuntu-24.04-arm
|
- ubuntu-24.04-arm
|
||||||
# - macos-latest
|
- macos-latest
|
||||||
# - macos-13
|
- macos-13
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: setup binary cache key
|
- name: setup binary cache key
|
||||||
run: echo "${{ secrets.NIX_CACHE_SECRET_KEY }}" >> /home/runner/cache-priv-key.pem
|
run: echo -n "${{ secrets.NIX_CACHE_SECRET_KEY }}" | xxd -p -r > ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v30
|
||||||
|
|
||||||
- name: Install Lix
|
|
||||||
run: |
|
|
||||||
sudo --preserve-env=PATH $(which nix) run \
|
|
||||||
--experimental-features "nix-command flakes" \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" \
|
|
||||||
'git+https://git.lix.systems/lix-project/lix?ref=refs/tags/2.92.0' -- \
|
|
||||||
upgrade-nix \
|
|
||||||
--extra-substituters https://cache.lix.systems --extra-trusted-public-keys "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o="
|
|
||||||
nix --version
|
|
||||||
|
|
||||||
- name: Sync repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
enable_kvm: true
|
||||||
|
extra_nix_config: |
|
||||||
|
show-trace = true
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
accept-flake-config = true
|
||||||
|
system-features = nixos-test benchmark big-parallel kvm
|
||||||
|
secret-key-files = ${{ runner.temp }}/cache-priv-key.pem
|
||||||
|
extra-substituters = https://nixcache.cy7.sh
|
||||||
|
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
||||||
|
|
||||||
- run: nix build -L ${{ matrix.package }}
|
- run: nix build -L ${{ matrix.package }}
|
||||||
|
|
||||||
- name: cache result
|
- name: cache result
|
||||||
if: always()
|
# https://stackoverflow.com/a/58859404
|
||||||
|
if: '!cancelled()'
|
||||||
run: |
|
run: |
|
||||||
nix copy -j8 \
|
nix run github:cything/nixcp -- \
|
||||||
--to 's3://nixcache?endpoint=s3.cy7.sh&secret-key=/home/runner/cache-priv-key.pem' \
|
push \
|
||||||
$(nix path-info --recursive --derivation "${{ matrix.package }}" |sed 's/\.drv$/.drv^*/')
|
--bucket nixcache \
|
||||||
|
--signing-key ${{ runner.temp }}/cache-priv-key.pem \
|
||||||
|
-u https://nix-community.cachix.org \
|
||||||
|
"${{ matrix.package }}"
|
||||||
|
|
||||||
- name: prepare tarball to upload
|
- name: prepare tarball to upload
|
||||||
run: nix run github:nixos/nixpkgs#gnutar hcvf result.tar result
|
run: nix run github:nixos/nixpkgs#gnutar hcvf result.tar result
|
||||||
|
|
32
.github/workflows/update-flake-lock.yml
vendored
32
.github/workflows/update-flake-lock.yml
vendored
|
@ -11,10 +11,32 @@ jobs:
|
||||||
createPullRequest:
|
createPullRequest:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@85e6279cec87321a52edac9c87bce653a07cf6c2
|
||||||
- name: Install Nix
|
|
||||||
uses: cachix/install-nix-action@v30
|
|
||||||
with:
|
with:
|
||||||
github_access_token: ${{ secrets.GITHUB_TOKEN }}
|
ssh-key: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
|
|
||||||
|
- name: Install Nix
|
||||||
|
uses: cachix/install-nix-action@53fb48f556dd912c4814b24ee8059a9c91c82b18
|
||||||
|
with:
|
||||||
|
enable_kvm: true
|
||||||
|
extra_nix_config: |
|
||||||
|
show-trace = true
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
accept-flake-config = true
|
||||||
|
system-features = nixos-test benchmark big-parallel kvm
|
||||||
|
secret-key-files = /home/runner/cache-priv-key.pem
|
||||||
|
extra-substituters = https://nixcache.cy7.sh
|
||||||
|
extra-trusted-public-keys = nixcache.cy7.sh:DN3d1dt0wnXfTH03oVmTee4KgmdNdB0NY3SuzA8Fwx8=
|
||||||
|
|
||||||
- name: Update flake.lock
|
- name: Update flake.lock
|
||||||
uses: DeterminateSystems/update-flake-lock@v24
|
run: |
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
nix flake update --commit-lock-file
|
||||||
|
|
||||||
|
- name: Create PR
|
||||||
|
uses: peter-evans/create-pull-request@98106d3f2b65918a6591f9e155117b7219ff7e51
|
||||||
|
with:
|
||||||
|
title: nix flake update
|
||||||
|
branch: update-flake-inputs
|
||||||
|
branch-suffix: timestamp
|
||||||
|
|
13
.sops.yaml
13
.sops.yaml
|
@ -129,3 +129,16 @@ creation_rules:
|
||||||
- *yt
|
- *yt
|
||||||
- *cy
|
- *cy
|
||||||
- *chunk
|
- *chunk
|
||||||
|
- path_regex: secrets/services/authelia.yaml
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *yt
|
||||||
|
- *cy
|
||||||
|
- *chunk
|
||||||
|
- path_regex: secrets/services/karakeep.yaml
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *yt
|
||||||
|
- *cy
|
||||||
|
- *chunk
|
||||||
|
|
||||||
|
|
1
README
Normal file
1
README
Normal file
|
@ -0,0 +1 @@
|
||||||
|
this is only open source for free ci
|
40
README.md
40
README.md
|
@ -1,40 +0,0 @@
|
||||||
# infra
|
|
||||||
## ./home
|
|
||||||
- [home-manager](https://github.com/nix-community/home-manager) configuration files
|
|
||||||
- foot, tmux, and zsh are configured in Nix
|
|
||||||
- nvim, rofi, sway, waybar are configured in their own literature and symlinked to $XDG_CONFIG_HOME with home-manager
|
|
||||||
|
|
||||||
## ./hosts
|
|
||||||
- [`hosts/common.nix`](hosts/common.nix): configuration that makes sense on all computers
|
|
||||||
- [`hosts/zsh.nix`](hosts/zsh.nix): for computers that have the power to run zsh
|
|
||||||
### ./hosts/ytnix
|
|
||||||
- personal laptop
|
|
||||||
- a single [`default.nix`](hosts/ytnix/default.nix) that could be modularized but works for now
|
|
||||||
|
|
||||||
### ./hosts/chunk
|
|
||||||
- the overworked server with 5% SLA
|
|
||||||
- very short and concise [`default.nix`](hosts/chunk/default.nix)
|
|
||||||
- services organized in their modules
|
|
||||||
- some services run through `virtualisation.oci-containers`:
|
|
||||||
- [immich](hosts/chunk/immich.nix)
|
|
||||||
- [conduwuit](hosts/chunk/conduwuit.nix)
|
|
||||||
|
|
||||||
### ./hosts/titan
|
|
||||||
- got this cause chunk would go down way too often :(
|
|
||||||
- hosted on azure for "reliability"
|
|
||||||
- runs:
|
|
||||||
- [ghost](hosts/titan/ghost.nix) (through `virtualisation.oci-containers`)
|
|
||||||
- [uptime-kuma](hosts/titan/uptime-kuma.nix)
|
|
||||||
- [ntfy-sh](hosts/titan/ntfy.nix)
|
|
||||||
|
|
||||||
## ./secrets
|
|
||||||
- secrets
|
|
||||||
- see [`.sops.yaml`](.sops.yaml) for who privy to what
|
|
||||||
|
|
||||||
## backups
|
|
||||||
- hourly borgbackup to [rsync.net](https://rsync.net)
|
|
||||||
- see [modules/backup](modules/backup.nix)
|
|
||||||
|
|
||||||
## monitoring
|
|
||||||
- [status.cything.io](https://status.cything.io/): uptime kuma (reliable)
|
|
||||||
- [grafana.cything.io](https://grafana.cything.io/): some real-time metrics here; unlike the status page this will go kaput often
|
|
8
ci/upload-to-cache.sh
Executable file
8
ci/upload-to-cache.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# https://nix.dev/guides/recipes/post-build-hook.html#implementing-the-build-hook
|
||||||
|
set -eu
|
||||||
|
set -f # disable globbing
|
||||||
|
export IFS=' '
|
||||||
|
echo "Uploading paths" $OUT_PATHS
|
||||||
|
exec /nix/var/nix/profiles/default/bin/nix copy --to "s3://nixcache?endpoint=s3.cy7.sh&compression=zstd¶llel-compression=true" $OUT_PATHS
|
863
flake.lock
generated
863
flake.lock
generated
File diff suppressed because it is too large
Load diff
267
flake.nix
267
flake.nix
|
@ -2,105 +2,25 @@
|
||||||
description = "cy's flake";
|
description = "cy's flake";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
sops-nix = {
|
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
url = "github:Mic92/sops-nix";
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
lanzaboote.url = "github:nix-community/lanzaboote/master";
|
||||||
home-manager = {
|
lanzaboote.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
url = "github:nix-community/home-manager";
|
rust-overlay.url = "github:oxalica/rust-overlay";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
nix-ld.url = "github:nix-community/nix-ld";
|
||||||
treefmt = {
|
nix-ld.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
url = "github:numtide/treefmt-nix";
|
nil.url = "github:oxalica/nil";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
nil.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
vscode-extensions.url = "github:nix-community/nix-vscode-extensions/";
|
||||||
lanzaboote = {
|
vscode-extensions.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
url = "github:nix-community/lanzaboote/master";
|
nix-index-database.url = "github:nix-community/nix-index-database";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.crane.follows = "crane";
|
garage.url = "github:deuxfleurs-org/garage";
|
||||||
inputs.flake-compat.follows = "flake-compat";
|
garage.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
inputs.rust-overlay.follows = "rust-overlay";
|
|
||||||
};
|
|
||||||
nixvim = {
|
|
||||||
url = "github:nix-community/nixvim";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.flake-parts.follows = "flake-parts";
|
|
||||||
};
|
|
||||||
flake-parts = {
|
|
||||||
url = "github:hercules-ci/flake-parts";
|
|
||||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
rust-overlay = {
|
|
||||||
url = "github:oxalica/rust-overlay";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
conduwuit = {
|
|
||||||
url = "github:girlbossceo/conduwuit";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
crane.follows = "crane";
|
|
||||||
flake-compat.follows = "flake-compat";
|
|
||||||
flake-utils.follows = "flake-utils";
|
|
||||||
attic.follows = "attic";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
lix-module = {
|
|
||||||
url = "git+https://git.lix.systems/lix-project/nixos-module";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.flake-utils.follows = "flake-utils";
|
|
||||||
};
|
|
||||||
nix-ld = {
|
|
||||||
url = "github:nix-community/nix-ld";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
nil = {
|
|
||||||
url = "github:oxalica/nil";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.rust-overlay.follows = "rust-overlay";
|
|
||||||
inputs.flake-utils.follows = "flake-utils";
|
|
||||||
};
|
|
||||||
vscode-extensions = {
|
|
||||||
url = "github:nix-community/nix-vscode-extensions/";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
inputs.flake-utils.follows = "flake-utils";
|
|
||||||
};
|
|
||||||
nix-index-database = {
|
|
||||||
url = "github:nix-community/nix-index-database";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
attic = {
|
|
||||||
url = "github:zhaofengli/attic";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
nixpkgs-stable.follows = "nixpkgs-stable";
|
|
||||||
flake-compat.follows = "flake-compat";
|
|
||||||
flake-parts.follows = "flake-parts";
|
|
||||||
crane.follows = "crane";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
garage = {
|
|
||||||
url = "github:deuxfleurs-org/garage";
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
rust-overlay.follows = "rust-overlay";
|
|
||||||
crane.follows = "crane";
|
|
||||||
flake-compat.follows = "flake-compat";
|
|
||||||
flake-utils.follows = "flake-utils";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nvim-github-theme = {
|
|
||||||
url = "github:projekt0n/github-nvim-theme";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# deduplication
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
crane.url = "github:ipetkov/crane";
|
|
||||||
flake-compat.url = "github:edolstra/flake-compat";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
|
@ -119,111 +39,70 @@
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
home-manager,
|
home-manager,
|
||||||
flake-parts,
|
|
||||||
...
|
...
|
||||||
}@inputs:
|
}@inputs:
|
||||||
flake-parts.lib.mkFlake { inherit inputs; } (
|
let
|
||||||
{ ... }:
|
pkgs = import nixpkgs {
|
||||||
|
config.allowUnfree = true;
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlays = [
|
||||||
|
inputs.rust-overlay.overlays.default
|
||||||
|
inputs.vscode-extensions.overlays.default
|
||||||
|
] ++ (import ./overlay { inherit inputs; });
|
||||||
|
};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
nixosConfigurations =
|
||||||
inputs.treefmt.flakeModule
|
let
|
||||||
];
|
lib = nixpkgs.lib;
|
||||||
systems = [
|
in
|
||||||
"x86_64-linux"
|
|
||||||
];
|
|
||||||
perSystem =
|
|
||||||
{
|
{
|
||||||
inputs',
|
ytnix = lib.nixosSystem {
|
||||||
...
|
specialArgs = { inherit inputs; };
|
||||||
}:
|
modules = [
|
||||||
{
|
{
|
||||||
treefmt = {
|
nixpkgs = { inherit pkgs; };
|
||||||
projectRootFile = "flake.nix";
|
}
|
||||||
programs.nixfmt.enable = true;
|
./hosts/ytnix
|
||||||
programs.typos.enable = true;
|
./modules
|
||||||
programs.shellcheck.enable = true;
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
inputs.lanzaboote.nixosModules.lanzaboote
|
||||||
programs.yamlfmt = {
|
inputs.nix-ld.nixosModules.nix-ld
|
||||||
enable = true;
|
];
|
||||||
settings.retain_line_breaks = true;
|
};
|
||||||
};
|
chunk = lib.nixosSystem {
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
settings.global.excludes = [
|
modules = [
|
||||||
"secrets/*"
|
{
|
||||||
"**/*.png" # tries to format a png file
|
nixpkgs = { inherit pkgs; };
|
||||||
|
}
|
||||||
|
./hosts/chunk
|
||||||
|
./modules
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
homeConfigurations =
|
||||||
flake =
|
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
lib = home-manager.lib;
|
||||||
config.allowUnfree = true;
|
|
||||||
system = "x86_64-linux";
|
|
||||||
overlays = [
|
|
||||||
inputs.rust-overlay.overlays.default
|
|
||||||
inputs.vscode-extensions.overlays.default
|
|
||||||
] ++ (import ./overlay { inherit inputs; });
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations =
|
"yt@ytnix" = lib.homeManagerConfiguration {
|
||||||
let
|
inherit pkgs;
|
||||||
lib = nixpkgs.lib;
|
extraSpecialArgs = { inherit inputs; };
|
||||||
in
|
modules = [
|
||||||
{
|
./home/yt/ytnix.nix
|
||||||
ytnix = lib.nixosSystem {
|
inputs.nix-index-database.hmModules.nix-index
|
||||||
specialArgs = { inherit inputs; };
|
];
|
||||||
modules = [
|
};
|
||||||
{
|
|
||||||
nixpkgs = { inherit pkgs; };
|
|
||||||
}
|
|
||||||
./hosts/ytnix
|
|
||||||
./modules
|
|
||||||
inputs.sops-nix.nixosModules.sops
|
|
||||||
inputs.lanzaboote.nixosModules.lanzaboote
|
|
||||||
inputs.lix-module.nixosModules.default
|
|
||||||
inputs.nix-ld.nixosModules.nix-ld
|
|
||||||
];
|
|
||||||
};
|
|
||||||
chunk = lib.nixosSystem {
|
|
||||||
specialArgs = { inherit inputs; };
|
|
||||||
modules = [
|
|
||||||
{
|
|
||||||
nixpkgs = { inherit pkgs; };
|
|
||||||
}
|
|
||||||
./hosts/chunk
|
|
||||||
./modules
|
|
||||||
inputs.sops-nix.nixosModules.sops
|
|
||||||
inputs.lix-module.nixosModules.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
homeConfigurations =
|
|
||||||
let
|
|
||||||
lib = home-manager.lib;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
"yt@ytnix" = lib.homeManagerConfiguration {
|
|
||||||
inherit pkgs;
|
|
||||||
extraSpecialArgs = { inherit inputs; };
|
|
||||||
modules = [
|
|
||||||
./home/yt/ytnix.nix
|
|
||||||
inputs.nixvim.homeManagerModules.nixvim
|
|
||||||
inputs.nix-index-database.hmModules.nix-index
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"yt@chunk" = lib.homeManagerConfiguration {
|
"yt@chunk" = lib.homeManagerConfiguration {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
extraSpecialArgs = { inherit inputs; };
|
extraSpecialArgs = { inherit inputs; };
|
||||||
modules = [
|
modules = [
|
||||||
./home/yt/chunk.nix
|
./home/yt/chunk.nix
|
||||||
inputs.nixvim.homeManagerModules.nixvim
|
];
|
||||||
];
|
};
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
builds:
|
|
||||||
include:
|
|
||||||
- 'nixosConfigurations.*'
|
|
||||||
- 'homeConfigurations.*'
|
|
||||||
- '*.aarch64-linux.*'
|
|
||||||
- '*.x86_64-linux.*'
|
|
|
@ -23,7 +23,6 @@
|
||||||
tamasfe.even-better-toml
|
tamasfe.even-better-toml
|
||||||
golang.go
|
golang.go
|
||||||
ms-python.python
|
ms-python.python
|
||||||
christian-kohler.path-intellisense
|
|
||||||
];
|
];
|
||||||
userSettings =
|
userSettings =
|
||||||
let
|
let
|
||||||
|
@ -74,6 +73,7 @@
|
||||||
"telemetry.enableTelemetry" = false;
|
"telemetry.enableTelemetry" = false;
|
||||||
"telemetry.telemetryLevel" = "off";
|
"telemetry.telemetryLevel" = "off";
|
||||||
"window.titleBarStyle" = "custom";
|
"window.titleBarStyle" = "custom";
|
||||||
|
"editor.formatOnSave" = true;
|
||||||
|
|
||||||
# terminal stuff
|
# terminal stuff
|
||||||
"terminal.integrated.cursorBlinking" = true;
|
"terminal.integrated.cursorBlinking" = true;
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
package = pkgs.ibm-plex;
|
package = pkgs.ibm-plex;
|
||||||
size = 12;
|
size = 12;
|
||||||
};
|
};
|
||||||
themeFile = "GitHub_Dark";
|
|
||||||
settings = {
|
settings = {
|
||||||
enable_audio_bell = true;
|
enable_audio_bell = true;
|
||||||
# how many windows should be open before kitty asks
|
# how many windows should be open before kitty asks
|
||||||
|
@ -17,10 +16,11 @@
|
||||||
|
|
||||||
# will probably lower this later but the max allowed is actually 4GB
|
# will probably lower this later but the max allowed is actually 4GB
|
||||||
# this is NOT stored in memory and can only be viewed with scrollback_pager
|
# this is NOT stored in memory and can only be viewed with scrollback_pager
|
||||||
"scrollback_pager_history_size" = "1024";
|
"scrollback_pager_history_size" = "10"; # in MB
|
||||||
# see https://github.com/sharkdp/bat/issues/1077#issuecomment-652785399
|
# see https://github.com/sharkdp/bat/issues/1077#issuecomment-652785399
|
||||||
"scrollback_pager" = "bat --pager='less -FR +G'";
|
"scrollback_pager" = "bat --pager='less -FR +G'";
|
||||||
"scrollback_lines" = 20000;
|
# "scrollback_lines" = 20000;
|
||||||
|
wheel_scroll_multiplier = 50;
|
||||||
};
|
};
|
||||||
keybindings = {
|
keybindings = {
|
||||||
# kitty_mod is ctrl+shift by default
|
# kitty_mod is ctrl+shift by default
|
||||||
|
@ -58,18 +58,29 @@
|
||||||
"kitty_mod+alt+p" = "move_tab_backward";
|
"kitty_mod+alt+p" = "move_tab_backward";
|
||||||
"kitty_mod+q" = "close_tab";
|
"kitty_mod+q" = "close_tab";
|
||||||
"kitty_mod+t" = "new_tab_with_cwd";
|
"kitty_mod+t" = "new_tab_with_cwd";
|
||||||
"ctrl+f2" = "detach_tab";
|
|
||||||
|
|
||||||
# hints
|
# hints
|
||||||
# > basically means the preceding key is a prefix (think tmux)
|
# > basically means the preceding key is a prefix (think tmux)
|
||||||
"kitty_mod+o>o" = "open_url_with_hints";
|
"kitty_mod+o>o" = "open_url_with_hints";
|
||||||
"kitty_mod+o>p" = "kitten hints --type path --program -";
|
# `--program @` means copy to clipboard
|
||||||
"kitty_mod+o>n" = "kitten hints --type line --program -";
|
"kitty_mod+o>u" = "kitten hints --type url --program @";
|
||||||
"kitty_mod+o>w" = "kitten hints --type word --program -";
|
"kitty_mod+o>p" = "kitten hints --type path --program @";
|
||||||
"kitty_mod+o>h" = "kitten hints --type hash --program -";
|
"kitty_mod+o>n" = "kitten hints --type line --program @";
|
||||||
|
"kitty_mod+o>w" = "kitten hints --type word --program @";
|
||||||
|
"kitty_mod+o>h" = "kitten hints --type hash --program @";
|
||||||
"kitty_mod+o>l" = "kitten hints --type linenum";
|
"kitty_mod+o>l" = "kitten hints --type linenum";
|
||||||
|
|
||||||
|
# scrolling
|
||||||
|
"kitty_mod+u" = "scroll_page_up";
|
||||||
|
"kitty_mod+d" = "scroll_page_down";
|
||||||
|
"kitty_mod+a" = "scroll_home";
|
||||||
|
"kitty_mod+e" = "scroll_end";
|
||||||
|
"kitty_mod+z" = "scroll_to_prompt -1"; # scroll to previous shell prompt
|
||||||
|
"kitty_mod+x" = "scroll_to_prompt 1"; # scroll to next shell prompt
|
||||||
|
"kitty_mod+y" = "show_scrollback"; # browse scrollback buffer in pager
|
||||||
|
"kitty_mod+g" = "show_last_command_output"; # browse output of last command in pager
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# programs.zsh.shellAliases."ssh" = "kitten ssh"; # doesn't seem to work with bitwarden ssh agent :(
|
programs.zsh.shellAliases."ssh" = "kitten ssh";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,215 +0,0 @@
|
||||||
{ pkgs, inputs, ... }:
|
|
||||||
{
|
|
||||||
programs.nixvim = {
|
|
||||||
enable = true;
|
|
||||||
plugins.lualine.enable = true;
|
|
||||||
opts = {
|
|
||||||
number = true;
|
|
||||||
relativenumber = true;
|
|
||||||
expandtab = true;
|
|
||||||
autoindent = true;
|
|
||||||
shiftwidth = 2;
|
|
||||||
smartindent = true;
|
|
||||||
tabstop = 2;
|
|
||||||
ignorecase = true;
|
|
||||||
incsearch = true;
|
|
||||||
smartcase = true;
|
|
||||||
};
|
|
||||||
colorscheme = "github_dark_tritanopia";
|
|
||||||
clipboard.register = "unnamed";
|
|
||||||
|
|
||||||
globals = {
|
|
||||||
mapleader = ",";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraPlugins = [
|
|
||||||
(pkgs.vimUtils.buildVimPlugin {
|
|
||||||
name = "github-theme";
|
|
||||||
src = inputs.nvim-github-theme;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
keymaps = [
|
|
||||||
{
|
|
||||||
action = "<cmd>Neotree toggle<CR>";
|
|
||||||
key = "<space>s";
|
|
||||||
mode = "n";
|
|
||||||
options.silent = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# shortcut to command mode
|
|
||||||
action = ":";
|
|
||||||
key = ";";
|
|
||||||
mode = [
|
|
||||||
"n"
|
|
||||||
"x"
|
|
||||||
];
|
|
||||||
options.silent = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# insert line below without moving cursor
|
|
||||||
action = "printf('m`%so<ESC>``', v:count1)";
|
|
||||||
key = "<space>o";
|
|
||||||
options.expr = true;
|
|
||||||
mode = "n";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
# insert line above without moving cursor
|
|
||||||
action = "printf('m`%sO<ESC>``', v:count1)";
|
|
||||||
key = "<space>O";
|
|
||||||
options.expr = true;
|
|
||||||
mode = "n";
|
|
||||||
}
|
|
||||||
# nice emacs bindings
|
|
||||||
{
|
|
||||||
action = "<HOME>";
|
|
||||||
key = "<C-a>";
|
|
||||||
mode = "i";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<END>";
|
|
||||||
key = "<C-e>";
|
|
||||||
mode = "i";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
plugins.cmp = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
formatting.fields = [
|
|
||||||
"abbr"
|
|
||||||
"kind"
|
|
||||||
"menu"
|
|
||||||
];
|
|
||||||
experimental = {
|
|
||||||
ghost_text = true;
|
|
||||||
};
|
|
||||||
snippet.expand = ''
|
|
||||||
function(args) require('luasnip').lsp_expand(args.body) end
|
|
||||||
'';
|
|
||||||
sources = [
|
|
||||||
{ name = "nvim_lsp"; }
|
|
||||||
{ name = "emoji"; }
|
|
||||||
{ name = "luasnip"; }
|
|
||||||
{ name = "buffer"; }
|
|
||||||
{ name = "path"; }
|
|
||||||
];
|
|
||||||
mapping = {
|
|
||||||
"<C-h>" = "cmp.mapping.abort()";
|
|
||||||
"<C-n>" = "cmp.mapping.select_next_item()";
|
|
||||||
"<C-p>" = "cmp.mapping.select_prev_item()";
|
|
||||||
"<C-u>" = "cmp.mapping.scroll_docs(-4)";
|
|
||||||
"<C-d>" = "cmp.mapping.scroll_docs(4)";
|
|
||||||
"<C-k>" = ''
|
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
if require("luasnip").expandable() then
|
|
||||||
require("luasnip").expand()
|
|
||||||
else
|
|
||||||
cmp.confirm({
|
|
||||||
select = true,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
'';
|
|
||||||
# plain tab conflicts with i try to indent
|
|
||||||
"<C-Tab>" = ''
|
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
if require("luasnip").jumpable(1) then
|
|
||||||
require("luasnip").jump(1)
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end,{"i","s"})
|
|
||||||
'';
|
|
||||||
"<S-Tab>" = ''
|
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
if require("luasnip").jumpable(-1) then
|
|
||||||
require("luasnip").jump(-1)
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end,{"i","s"})
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins.lsp = {
|
|
||||||
enable = true;
|
|
||||||
keymaps.lspBuf = {
|
|
||||||
"K" = "hover";
|
|
||||||
"gd" = "definition";
|
|
||||||
"gD" = "references";
|
|
||||||
# "gt" = "type_definition"; # conflicts with switch tab
|
|
||||||
"gI" = "type_definition";
|
|
||||||
"gi" = "implementation";
|
|
||||||
};
|
|
||||||
servers = {
|
|
||||||
bashls.enable = true;
|
|
||||||
lua_ls.enable = true;
|
|
||||||
nil_ls = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
formatting.command = [
|
|
||||||
"nix"
|
|
||||||
"fmt"
|
|
||||||
];
|
|
||||||
nix.flake.autoArchive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
rust_analyzer = {
|
|
||||||
enable = true;
|
|
||||||
installRustc = false;
|
|
||||||
installCargo = false;
|
|
||||||
};
|
|
||||||
eslint.enable = true;
|
|
||||||
yamlls.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
plugins.treesitter = {
|
|
||||||
enable = true;
|
|
||||||
nixGrammars = true;
|
|
||||||
settings = {
|
|
||||||
indent.enable = true;
|
|
||||||
auto_install = true;
|
|
||||||
highlight.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
plugins.fzf-lua = {
|
|
||||||
enable = true;
|
|
||||||
profile = "fzf-native";
|
|
||||||
keymaps = {
|
|
||||||
"<leader>ff" = "files";
|
|
||||||
"<leader>fg" = "live_grep";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins.neo-tree = {
|
|
||||||
enable = true;
|
|
||||||
buffers.followCurrentFile.enabled = true;
|
|
||||||
window.width = 30;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins.gitsigns = {
|
|
||||||
enable = true;
|
|
||||||
settings.current_line_blame = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugins.cmp-buffer.enable = true;
|
|
||||||
plugins.cmp-emoji.enable = true;
|
|
||||||
plugins.cmp-nvim-lsp.enable = true;
|
|
||||||
plugins.cmp-path.enable = true;
|
|
||||||
plugins.cmp_luasnip.enable = true;
|
|
||||||
plugins.luasnip.enable = true;
|
|
||||||
plugins.nvim-autopairs.enable = true;
|
|
||||||
plugins.rainbow-delimiters.enable = true;
|
|
||||||
plugins.web-devicons.enable = true;
|
|
||||||
plugins.auto-save.enable = true;
|
|
||||||
plugins.indent-blankline.enable = true;
|
|
||||||
plugins.undotree.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -3,7 +3,6 @@
|
||||||
imports = [
|
imports = [
|
||||||
../tmux.nix
|
../tmux.nix
|
||||||
../zsh
|
../zsh
|
||||||
../nixvim
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
|
|
|
@ -103,6 +103,8 @@
|
||||||
gopls
|
gopls
|
||||||
rust-analyzer
|
rust-analyzer
|
||||||
minio-client
|
minio-client
|
||||||
|
nil
|
||||||
|
keepassxc
|
||||||
];
|
];
|
||||||
|
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
|
@ -122,9 +124,6 @@
|
||||||
AWS_ENDPOINT_URL = "https://s3.cy7.sh";
|
AWS_ENDPOINT_URL = "https://s3.cy7.sh";
|
||||||
AWS_ACCESS_KEY_ID = "$(cat /run/secrets/aws/key_id)";
|
AWS_ACCESS_KEY_ID = "$(cat /run/secrets/aws/key_id)";
|
||||||
AWS_SECRET_ACCESS_KEY = "$(cat /run/secrets/aws/key_secret)";
|
AWS_SECRET_ACCESS_KEY = "$(cat /run/secrets/aws/key_secret)";
|
||||||
|
|
||||||
# bitwarden ssh agent
|
|
||||||
SSH_AUTH_SOCK = "$HOME/.bitwarden-ssh-agent.sock";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
home.sessionPath = [
|
home.sessionPath = [
|
||||||
|
@ -152,4 +151,17 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.nix-index-database.comma.enable = true;
|
programs.nix-index-database.comma.enable = true;
|
||||||
|
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
addKeysToAgent = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.firefox.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
services.conduwuit = {
|
|
||||||
enable = true;
|
|
||||||
settings.global = {
|
|
||||||
port = [ 8448 ];
|
|
||||||
server_name = "cything.io";
|
|
||||||
allow_check_for_updates = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.caddy.virtualHosts."chat.cything.io".extraConfig = ''
|
|
||||||
import common
|
|
||||||
reverse_proxy localhost:8448
|
|
||||||
'';
|
|
||||||
|
|
||||||
services.caddy.virtualHosts."cything.io" = {
|
|
||||||
serverAliases = [ "www.cything.io" ];
|
|
||||||
extraConfig = ''
|
|
||||||
import common
|
|
||||||
|
|
||||||
header /.well-known/matrix/* Content-Type application/json
|
|
||||||
header /.well-known/matrix/* Access-Control-Allow-Origin *
|
|
||||||
header /.well-known/matrix/* Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS,PATCH,HEAD
|
|
||||||
header /.well-known/matrix/* Access-Control-Allow-Headers X-Requested-With,Content-Type,Authorization,Origin,Accept
|
|
||||||
route {
|
|
||||||
respond /.well-known/matrix/server {"m.server":"chat.cything.io:443"}
|
|
||||||
respond /.well-known/matrix/client {"m.server":{"base_url":"https://chat.cything.io"},"m.homeserver":{"base_url":"https://chat.cything.io"},"org.matrix.msc3575.proxy":{"url":"https://chat.cything.io"}}
|
|
||||||
redir https://cy7.sh/posts{uri} permanent
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -16,9 +16,7 @@
|
||||||
./redlib.nix
|
./redlib.nix
|
||||||
./vaultwarden.nix
|
./vaultwarden.nix
|
||||||
./grafana.nix
|
./grafana.nix
|
||||||
./conduwuit.nix
|
|
||||||
./immich.nix
|
./immich.nix
|
||||||
./element.nix
|
|
||||||
./forgejo.nix
|
./forgejo.nix
|
||||||
./garage.nix
|
./garage.nix
|
||||||
./tailscale.nix
|
./tailscale.nix
|
||||||
|
@ -47,20 +45,14 @@
|
||||||
"rsyncnet/id_ed25519" = {
|
"rsyncnet/id_ed25519" = {
|
||||||
sopsFile = ../../secrets/zh5061/chunk.yaml;
|
sopsFile = ../../secrets/zh5061/chunk.yaml;
|
||||||
};
|
};
|
||||||
"attic/env" = {
|
|
||||||
sopsFile = ../../secrets/services/attic.yaml;
|
|
||||||
};
|
|
||||||
"garage/env" = {
|
"garage/env" = {
|
||||||
sopsFile = ../../secrets/services/garage.yaml;
|
sopsFile = ../../secrets/services/garage.yaml;
|
||||||
};
|
};
|
||||||
"tailscale/auth" = {
|
"tailscale/auth" = {
|
||||||
sopsFile = ../../secrets/services/tailscale.yaml;
|
sopsFile = ../../secrets/services/tailscale.yaml;
|
||||||
};
|
};
|
||||||
"zipline/env" = {
|
"karakeep/env" = {
|
||||||
sopsFile = ../../secrets/services/zipline.yaml;
|
sopsFile = ../../secrets/services/karakeep.yaml;
|
||||||
};
|
|
||||||
"searx/env" = {
|
|
||||||
sopsFile = ../../secrets/services/searx.yaml;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -145,13 +137,15 @@
|
||||||
"podman"
|
"podman"
|
||||||
];
|
];
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdhAQYy0+vS+QmyCd0MAbqbgzyMGcsuuFyf6kg2yKge yt@ytlinux"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdhAQYy0+vS+QmyCd0MAbqbgzyMGcsuuFyf6kg2yKge"
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINyn2+OoRN4nExti+vFQ1NHEZip0slAoCH9C5/FzvgZD yt@ytnix"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfubDWr0kRm2o4DqaK6l1s4NCdTkljXZWKWCiF5nX+6"
|
||||||
|
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA/IX9OFEhHS9Dl8nrtHkL7j7hhy7in9OAY/hVuzEGL0AAAABHNzaDo="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdhAQYy0+vS+QmyCd0MAbqbgzyMGcsuuFyf6kg2yKge yt@ytlinux"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPdhAQYy0+vS+QmyCd0MAbqbgzyMGcsuuFyf6kg2yKge yt@ytlinux"
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINyn2+OoRN4nExti+vFQ1NHEZip0slAoCH9C5/FzvgZD yt@ytnix"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfubDWr0kRm2o4DqaK6l1s4NCdTkljXZWKWCiF5nX+6"
|
||||||
|
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA/IX9OFEhHS9Dl8nrtHkL7j7hhy7in9OAY/hVuzEGL0AAAABHNzaDo="
|
||||||
];
|
];
|
||||||
# for forgejo
|
# for forgejo
|
||||||
users.users.git = {
|
users.users.git = {
|
||||||
|
@ -187,7 +181,10 @@
|
||||||
programs.git.enable = true;
|
programs.git.enable = true;
|
||||||
|
|
||||||
my.caddy.enable = true;
|
my.caddy.enable = true;
|
||||||
|
|
||||||
# container stuff
|
|
||||||
my.containerization.enable = true;
|
my.containerization.enable = true;
|
||||||
|
my.authelia.enable = true;
|
||||||
|
my.karakeep = {
|
||||||
|
enable = false;
|
||||||
|
dataDir = "/opt/karakeep";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
virtualisation.oci-containers.containers.element = {
|
|
||||||
image = "vectorim/element-web";
|
|
||||||
autoStart = true;
|
|
||||||
ports = [ "127.0.0.1:8089:8089" ];
|
|
||||||
pull = "newer";
|
|
||||||
networks = [ "element-net" ];
|
|
||||||
environment = {
|
|
||||||
ELEMENT_WEB_PORT = "8089";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.create-element-net = {
|
|
||||||
serviceConfig.Type = "oneshot";
|
|
||||||
wantedBy = with config.virtualisation.oci-containers; [
|
|
||||||
"${backend}-element.service"
|
|
||||||
];
|
|
||||||
script = ''
|
|
||||||
${pkgs.podman}/bin/podman network exists element-net || \
|
|
||||||
${pkgs.podman}/bin/podman network create element-net
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
services.caddy.virtualHosts."element.cy7.sh".extraConfig = ''
|
|
||||||
import common
|
|
||||||
reverse_proxy localhost:8089
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -17,6 +17,7 @@
|
||||||
};
|
};
|
||||||
admin.api_bind_addr = "[::]:3903";
|
admin.api_bind_addr = "[::]:3903";
|
||||||
rpc_bind_addr = "[::]:3901";
|
rpc_bind_addr = "[::]:3901";
|
||||||
|
rpc_public_addr = "100.122.132.30:3901";
|
||||||
replication_factor = 1;
|
replication_factor = 1;
|
||||||
db_engine = "lmdb";
|
db_engine = "lmdb";
|
||||||
disable_scrub = true;
|
disable_scrub = true;
|
||||||
|
@ -40,9 +41,17 @@
|
||||||
reverse_proxy localhost:3903
|
reverse_proxy localhost:3903
|
||||||
'';
|
'';
|
||||||
"*.web.cy7.sh" = {
|
"*.web.cy7.sh" = {
|
||||||
serverAliases = [ "nixcache.cy7.sh" ];
|
serverAliases = [ "nixcache.cy7.sh" "staging.cy7.sh" ];
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
import common
|
import common
|
||||||
|
@plain {
|
||||||
|
host nixcache.cy7.sh nixcache.web.cy7.sh
|
||||||
|
path / /nix-cache-info
|
||||||
|
}
|
||||||
|
header @plain {
|
||||||
|
>content-type text/plain
|
||||||
|
}
|
||||||
|
|
||||||
reverse_proxy localhost:3902
|
reverse_proxy localhost:3902
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
|
|
||||||
services.caddy.virtualHosts."grafana.cy7.sh".extraConfig = ''
|
services.caddy.virtualHosts."grafana.cy7.sh".extraConfig = ''
|
||||||
import common
|
import common
|
||||||
|
import authelia
|
||||||
reverse_proxy localhost:8088
|
reverse_proxy localhost:8088
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
dialect = "postgresql";
|
dialect = "postgresql";
|
||||||
};
|
};
|
||||||
port = 8085;
|
port = 8085;
|
||||||
domain = "pad.cything.io";
|
domain = "pad.cy7.sh";
|
||||||
allowEmailRegister = false;
|
allowEmailRegister = false;
|
||||||
protocolUseSSL = true;
|
protocolUseSSL = true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
services.caddy.virtualHosts."rss.cy7.sh".extraConfig = ''
|
services.caddy.virtualHosts."rss.cy7.sh".extraConfig = ''
|
||||||
import common
|
import common
|
||||||
|
import authelia
|
||||||
reverse_proxy localhost:8080
|
reverse_proxy localhost:8080
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,18 +14,19 @@ let
|
||||||
--config ${config.sops.secrets."rclone/config".path} \
|
--config ${config.sops.secrets."rclone/config".path} \
|
||||||
--allow-other \
|
--allow-other \
|
||||||
--cache-dir /var/cache/rclone \
|
--cache-dir /var/cache/rclone \
|
||||||
--transfers 32 \
|
--transfers 64 \
|
||||||
--vfs-cache-mode full \
|
--vfs-cache-mode full \
|
||||||
--vfs-cache-min-free-space 5G \
|
--vfs-cache-min-free-space 5G \
|
||||||
--dir-cache-time 30d \
|
--dir-cache-time 30d \
|
||||||
--no-checksum \
|
--no-checksum \
|
||||||
--no-modtime \
|
--no-modtime \
|
||||||
--vfs-fast-fingerprint \
|
--vfs-fast-fingerprint \
|
||||||
--vfs-read-chunk-size 16M \
|
--vfs-read-chunk-size 8M \
|
||||||
--vfs-read-chunk-streams 16 \
|
--vfs-read-chunk-streams 16 \
|
||||||
--sftp-concurrency 64 \
|
--sftp-concurrency 128 \
|
||||||
--sftp-chunk-size 255k \
|
--sftp-chunk-size 255k \
|
||||||
--buffer-size 0 \
|
--buffer-size 0 \
|
||||||
|
--write-back-cache \
|
||||||
${remote} ${mount}
|
${remote} ${mount}
|
||||||
'';
|
'';
|
||||||
ExecStop = "${lib.getExe' pkgs.fuse "fusermount"} -zu ${mount}";
|
ExecStop = "${lib.getExe' pkgs.fuse "fusermount"} -zu ${mount}";
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
services.caddy.virtualHosts."red.cy7.sh".extraConfig = ''
|
services.caddy.virtualHosts."red.cy7.sh".extraConfig = ''
|
||||||
import common
|
import common
|
||||||
|
import authelia
|
||||||
reverse_proxy localhost:8087
|
reverse_proxy localhost:8087
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ inputs, config, ... }:
|
{ inputs, config, pkgs, ... }:
|
||||||
{
|
{
|
||||||
nix = {
|
nix = {
|
||||||
|
package = pkgs.lix;
|
||||||
settings = {
|
settings = {
|
||||||
experimental-features = "nix-command flakes";
|
experimental-features = "nix-command flakes";
|
||||||
auto-optimise-store = true;
|
auto-optimise-store = true;
|
||||||
|
|
|
@ -274,7 +274,6 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
# nix run github:thiagokokada/nix-alien#nix-alien-find-libs ./<binary>
|
# nix run github:thiagokokada/nix-alien#nix-alien-find-libs ./<binary>
|
||||||
libraries = with pkgs; [
|
libraries = with pkgs; [
|
||||||
# TODO: revisit what we actually need
|
|
||||||
mesa
|
mesa
|
||||||
extest
|
extest
|
||||||
stdenv.cc.cc
|
stdenv.cc.cc
|
||||||
|
@ -329,6 +328,8 @@
|
||||||
curl
|
curl
|
||||||
pcre2
|
pcre2
|
||||||
gsettings-desktop-schemas
|
gsettings-desktop-schemas
|
||||||
|
fzf
|
||||||
|
systemd
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
programs.evolution.enable = true;
|
programs.evolution.enable = true;
|
||||||
|
@ -390,4 +391,6 @@
|
||||||
nix.settings.extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
|
nix.settings.extra-sandbox-paths = [ config.programs.ccache.cacheDir ];
|
||||||
programs.fuse.userAllowOther = true;
|
programs.fuse.userAllowOther = true;
|
||||||
nix.settings.sandbox = false;
|
nix.settings.sandbox = false;
|
||||||
|
|
||||||
|
programs.ssh.startAgent = true;
|
||||||
}
|
}
|
||||||
|
|
137
modules/authelia.nix
Normal file
137
modules/authelia.nix
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.my.authelia;
|
||||||
|
getSecret = path: config.sops.secrets.${path}.path;
|
||||||
|
sopsConfig = {
|
||||||
|
sopsFile = ../secrets/services/authelia.yaml;
|
||||||
|
owner = "authelia-main";
|
||||||
|
};
|
||||||
|
domain = "auth.cy7.sh";
|
||||||
|
varPath = "/var/lib/authelia-main";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.authelia = {
|
||||||
|
enable = lib.mkEnableOption "authelia";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.authelia.instances.main = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
theme = "dark";
|
||||||
|
default_2fa_method = "webauthn";
|
||||||
|
log.level = "info";
|
||||||
|
log.format = "text";
|
||||||
|
server = {
|
||||||
|
disable_healthcheck = true;
|
||||||
|
endpoints.authz.forward-auth.implementation = "ForwardAuth";
|
||||||
|
};
|
||||||
|
authentication_backend.file.path = "${varPath}/users_database.yaml";
|
||||||
|
access_control = {
|
||||||
|
default_policy = "deny";
|
||||||
|
rules = [
|
||||||
|
{
|
||||||
|
domain = "*.cy7.sh";
|
||||||
|
policy = "one_factor";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
session.cookies = [{
|
||||||
|
domain = "cy7.sh";
|
||||||
|
authelia_url = "https://${domain}";
|
||||||
|
}];
|
||||||
|
storage.local.path = "${varPath}/db.sqlite3";
|
||||||
|
notifier.filesystem.filename = "${varPath}/notifications.txt";
|
||||||
|
webauthn = {
|
||||||
|
enable_passkey_login = true;
|
||||||
|
};
|
||||||
|
identity_providers.oidc.claims_policies = {
|
||||||
|
# https://github.com/karakeep-app/karakeep/issues/410
|
||||||
|
# https://www.authelia.com/integration/openid-connect/openid-connect-1.0-claims/#restore-functionality-prior-to-claims-parameter
|
||||||
|
karakeep.id_token = [ "email" ];
|
||||||
|
};
|
||||||
|
identity_providers.oidc.clients = [
|
||||||
|
{
|
||||||
|
client_id = "4EIrpRb9rnwHWjYWvlz2gYrtTmoOLF1D5gqXw28BvmOS0f-9T2p4CFwuctf4Co1hkpo2sd4Y";
|
||||||
|
client_name = "immich";
|
||||||
|
client_secret = "$argon2id$v=19$m=65536,t=3,p=4$Vny2G8EbSPafSwnIuq2Zkg$eF2om4WDEaqCFmrAG27h2mYl+cXxXyttPJ7gaPLs+f8";
|
||||||
|
public = false;
|
||||||
|
authorization_policy = "two_factor";
|
||||||
|
redirect_uris = [
|
||||||
|
"https://photos.cy7.sh/auth/login"
|
||||||
|
"https://photos.cy7.sh/user-settings"
|
||||||
|
"app.immich:///oauth-callback"
|
||||||
|
];
|
||||||
|
scopes = [ "openid" "profile" "email" ];
|
||||||
|
userinfo_signed_response_alg = "none";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
client_id = "_kuUEYxyfXjInJCniwugpw2Qn6iI-YW24NOkHZG~63BAhnAACDZ.xsLqOdGghj2DNZxXR0sU";
|
||||||
|
client_name = "Forgejo";
|
||||||
|
client_secret = "$argon2id$v=19$m=65536,t=3,p=4$O2O5r/7A8hc4EMvernQ4Dw$YOVqtwY3jv0HlcxmviPq2CRnD7Dw85V9KDtTSUQE7bA";
|
||||||
|
public = false;
|
||||||
|
authorization_policy = "two_factor";
|
||||||
|
redirect_uris = [
|
||||||
|
"https://git.cy7.sh/user/oauth2/authelia/callback"
|
||||||
|
];
|
||||||
|
scopes = [ "openid" "profile" "email" ];
|
||||||
|
userinfo_signed_response_alg = "none";
|
||||||
|
token_endpoint_auth_method = "client_secret_basic";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
client_id = "b_ITCG0uNzy9lZ5nVC~Ny5R35te8I3hoQW1uraCbdxeiE9VuiCIelMmZZ7dAZLg_anTUWSQG";
|
||||||
|
client_name = "HedgeDoc";
|
||||||
|
client_secret = "$argon2id$v=19$m=65536,t=3,p=4$MFSXW3gjIZf0M3e8s8RJCg$6KWwksJe2vdUebPEdYc0Zy88fzGcHPrbStcqkiXl+Hg";
|
||||||
|
public = false;
|
||||||
|
authorization_policy = "two_factor";
|
||||||
|
redirect_uris = [
|
||||||
|
"https://pad.cy7.sh/auth/oauth2/callback"
|
||||||
|
];
|
||||||
|
scopes = [ "openid" "profile" "email" ];
|
||||||
|
userinfo_signed_response_alg = "none";
|
||||||
|
grant_types = [ "refresh_token" "authorization_code" ];
|
||||||
|
response_types = [ "code" ];
|
||||||
|
response_modes = [ "form_post" "query" "fragment" ];
|
||||||
|
audience = [];
|
||||||
|
token_endpoint_auth_method = "client_secret_post";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
client_id = "0SbsGvw5APYJ4px~dv38rCVgXtK2XWrF1QvyuaFz48cgsNm-rAXkSgNOctfxS21IWOFSfsm5";
|
||||||
|
client_name = "Karakeep";
|
||||||
|
client_secret = "$pbkdf2-sha512$310000$4UanDZq.6oholJW3CmKwtQ$9e3hqR8qGU4LoneR/Y9jtJTx0iSzATI4iXymrs8QrmGw4JY1BPF4.IJ9Jbc.8cikU4qpfUIFO6r2dG7JHznCnw";
|
||||||
|
public = false;
|
||||||
|
authorization_policy = "two_factor";
|
||||||
|
redirect_uris = [ "https://keep.cy7.sh/api/auth/callback/custom" ];
|
||||||
|
scopes = [ "openid" "profile" "email" ];
|
||||||
|
userinfo_signed_response_alg = "none";
|
||||||
|
claims_policy = "karakeep";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
secrets = {
|
||||||
|
sessionSecretFile = getSecret "authelia/session";
|
||||||
|
storageEncryptionKeyFile = getSecret "authelia/storage";
|
||||||
|
jwtSecretFile = getSecret "authelia/jwt";
|
||||||
|
oidcHmacSecretFile = getSecret "authelia/hmac";
|
||||||
|
oidcIssuerPrivateKeyFile = getSecret "authelia/oidc_private";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sops.secrets = {
|
||||||
|
"authelia/jwt" = sopsConfig;
|
||||||
|
"authelia/storage" = sopsConfig;
|
||||||
|
"authelia/session" = sopsConfig;
|
||||||
|
"authelia/hmac" = sopsConfig;
|
||||||
|
"authelia/oidc_private" = sopsConfig;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts.${domain}.extraConfig = ''
|
||||||
|
import common
|
||||||
|
reverse_proxy localhost:9091
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ in
|
||||||
# (still need the @ to pass nix config check)
|
# (still need the @ to pass nix config check)
|
||||||
"github.com/caddy-dns/cloudflare@v0.0.0-20250228175314-1fb64108d4de"
|
"github.com/caddy-dns/cloudflare@v0.0.0-20250228175314-1fb64108d4de"
|
||||||
];
|
];
|
||||||
hash = "sha256-YYpsf8HMONR1teMiSymo2y+HrKoxuJMKIea5/NEykGc=";
|
hash = "sha256-pfh9DXUj35jlAntkWc4D5wuW04xxQfM1rZ4KFauMzvc=";
|
||||||
};
|
};
|
||||||
logFormat = lib.mkForce "level INFO";
|
logFormat = lib.mkForce "level INFO";
|
||||||
acmeCA = "https://acme-v02.api.letsencrypt.org/directory";
|
acmeCA = "https://acme-v02.api.letsencrypt.org/directory";
|
||||||
|
@ -34,8 +34,25 @@ in
|
||||||
resolvers 1.1.1.1 8.8.8.8
|
resolvers 1.1.1.1 8.8.8.8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(authelia) {
|
||||||
|
forward_auth localhost:9091 {
|
||||||
|
uri /api/authz/forward-auth
|
||||||
|
copy_headers Remote-User Remote-Groups Remote-Name Remote-Email
|
||||||
|
}
|
||||||
|
}
|
||||||
'';
|
'';
|
||||||
environmentFile = config.sops.secrets."caddy/env".path;
|
environmentFile = config.sops.secrets."caddy/env".path;
|
||||||
|
|
||||||
|
virtualHosts."keys.cy7.sh".extraConfig = ''
|
||||||
|
import common
|
||||||
|
respond / 200 {
|
||||||
|
body "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfubDWr0kRm2o4DqaK6l1s4NCdTkljXZWKWCiF5nX+6
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPhUt9h5dCcrwOrZNKkStCX5OxumPzEwYXSU/0DgtWgP
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINyn2+OoRN4nExti+vFQ1NHEZip0slAoCH9C5/FzvgZD
|
||||||
|
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIA/IX9OFEhHS9Dl8nrtHkL7j7hhy7in9OAY/hVuzEGL0AAAABHNzaDo="
|
||||||
|
}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,10 @@ in
|
||||||
};
|
};
|
||||||
# answer on /var/run/docker.sock
|
# answer on /var/run/docker.sock
|
||||||
dockerSocket.enable = true;
|
dockerSocket.enable = true;
|
||||||
|
autoPrune = {
|
||||||
|
enable = true;
|
||||||
|
dates = "daily";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
docker.enable = lib.mkIf (!cfg.usePodman) true;
|
docker.enable = lib.mkIf (!cfg.usePodman) true;
|
||||||
oci-containers.backend = lib.mkIf (!cfg.usePodman) "docker";
|
oci-containers.backend = lib.mkIf (!cfg.usePodman) "docker";
|
||||||
|
|
|
@ -9,5 +9,7 @@
|
||||||
./vaultwarden.nix
|
./vaultwarden.nix
|
||||||
./searx.nix
|
./searx.nix
|
||||||
./attic.nix
|
./attic.nix
|
||||||
|
./authelia.nix
|
||||||
|
./karakeep.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
81
modules/karakeep.nix
Normal file
81
modules/karakeep.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.my.karakeep;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.karakeep = {
|
||||||
|
enable = lib.mkEnableOption "karakeep";
|
||||||
|
dataDir = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
};
|
||||||
|
port = lib.mkOption {
|
||||||
|
default = 3002;
|
||||||
|
description = "port for the web service";
|
||||||
|
type = lib.types.port;
|
||||||
|
};
|
||||||
|
domain = lib.mkOption {
|
||||||
|
default = "keep.cy7.sh";
|
||||||
|
type = lib.types.str;
|
||||||
|
};
|
||||||
|
environmentFile = lib.mkOption {
|
||||||
|
default = config.sops.secrets."karakeep/env".path;
|
||||||
|
type = lib.types.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
virtualisation.oci-containers.containers = {
|
||||||
|
karakeep-web = {
|
||||||
|
image = "ghcr.io/karakeep-app/karakeep:release";
|
||||||
|
pull = "newer";
|
||||||
|
volumes = [ "${cfg.dataDir}:/data" ];
|
||||||
|
ports = [ "${toString cfg.port}:3000"];
|
||||||
|
dependsOn = [
|
||||||
|
"karakeep-chrome"
|
||||||
|
"karakeep-meilisearch"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
MEILI_ADDR = "http://karakeep-meilisearch:7700";
|
||||||
|
BROWSER_WEB_URL = "http://karakeep-chrome:9222";
|
||||||
|
DATA_DIR = "/data";
|
||||||
|
NEXTAUTH_URL = "https://${cfg.domain}";
|
||||||
|
DISABLE_PASSWORD_AUTH = "true";
|
||||||
|
OAUTH_WELLKNOWN_URL = "https://auth.cy7.sh/.well-known/openid-configuration";
|
||||||
|
OAUTH_CLIENT_ID = "0SbsGvw5APYJ4px~dv38rCVgXtK2XWrF1QvyuaFz48cgsNm-rAXkSgNOctfxS21IWOFSfsm5";
|
||||||
|
OAUTH_PROVIDER_NAME = "Authelia";
|
||||||
|
OAUTH_ALLOW_DANGEROUS_EMAIL_ACCOUNT_LINKING = "true";
|
||||||
|
};
|
||||||
|
# needs NEXTAUTH_SECRET
|
||||||
|
environmentFiles = [ "${cfg.environmentFile}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
karakeep-chrome = {
|
||||||
|
image = "ghcr.io/zenika/alpine-chrome:latest";
|
||||||
|
pull = "newer";
|
||||||
|
cmd = [
|
||||||
|
"--no-sandbox"
|
||||||
|
"--disable-gpu"
|
||||||
|
"--disable-dev-shm-usage"
|
||||||
|
"--remote-debugging-address=0.0.0.0"
|
||||||
|
"--remote-debugging-port=9222"
|
||||||
|
"--hide-scrollbars"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
karakeep-meilisearch = {
|
||||||
|
image = "getmeili/meilisearch:latest";
|
||||||
|
volumes = [ "meilisearch:/meili_data" ];
|
||||||
|
environment = {
|
||||||
|
MEILI_NO_ANALYTICS = "true";
|
||||||
|
};
|
||||||
|
# needs MEILI_MASTER_KEY
|
||||||
|
environmentFiles = [ "${cfg.environmentFile}" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.caddy.virtualHosts.${cfg.domain}.extraConfig = ''
|
||||||
|
import common
|
||||||
|
reverse_proxy localhost:${toString cfg.port}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
19
modules/vault.nix
Normal file
19
modules/vault.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.my.vault;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.vault = {
|
||||||
|
enable = lib.mkEnableOption "hashicorp vault";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
services.vault = {
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
final: prev: {
|
|
||||||
attic-server = prev.attic-server.overrideAttrs {
|
|
||||||
patches = [
|
|
||||||
./prefetch-8-chunks.patch
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
diff --git a/server/src/api/binary_cache.rs b/server/src/api/binary_cache.rs
|
|
||||||
index 02e4857..b522154 100644
|
|
||||||
--- a/server/src/api/binary_cache.rs
|
|
||||||
+++ b/server/src/api/binary_cache.rs
|
|
||||||
@@ -215,7 +215,7 @@ async fn get_nar(
|
|
||||||
let chunk = chunks[0].as_ref().unwrap();
|
|
||||||
let remote_file = &chunk.remote_file.0;
|
|
||||||
let storage = state.storage().await?;
|
|
||||||
- match storage.download_file_db(remote_file, false).await? {
|
|
||||||
+ match storage.download_file_db(remote_file, true).await? {
|
|
||||||
Download::Url(url) => Ok(Redirect::temporary(&url).into_response()),
|
|
||||||
Download::AsyncRead(stream) => {
|
|
||||||
let stream = ReaderStream::new(stream).map_err(|e| {
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
final: prev: {
|
|
||||||
bitwarden-desktop = prev.bitwarden-desktop.overrideAttrs (
|
|
||||||
finalAttrs: prevAttrs: {
|
|
||||||
patches = prevAttrs.patches ++ [
|
|
||||||
./ssh-agent-no-confirm.patch
|
|
||||||
];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs b/core/src/ssh_agent/mod.rs
|
|
||||||
index 4e304cc..8203dca 100644
|
|
||||||
--- a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs
|
|
||||||
+++ b/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs
|
|
||||||
@@ -44,28 +44,7 @@ impl ssh_agent::Agent<peerinfo::models::PeerInfo> for BitwardenDesktopAgent {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- let request_id = self.get_request_id().await;
|
|
||||||
- println!(
|
|
||||||
- "[SSH Agent] Confirming request from application: {}",
|
|
||||||
- info.process_name()
|
|
||||||
- );
|
|
||||||
-
|
|
||||||
- let mut rx_channel = self.get_ui_response_rx.lock().await.resubscribe();
|
|
||||||
- self.show_ui_request_tx
|
|
||||||
- .send(SshAgentUIRequest {
|
|
||||||
- request_id,
|
|
||||||
- cipher_id: Some(ssh_key.cipher_uuid.clone()),
|
|
||||||
- process_name: info.process_name().to_string(),
|
|
||||||
- is_list: false,
|
|
||||||
- })
|
|
||||||
- .await
|
|
||||||
- .expect("Should send request to ui");
|
|
||||||
- while let Ok((id, response)) = rx_channel.recv().await {
|
|
||||||
- if id == request_id {
|
|
||||||
- return response;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- false
|
|
||||||
+ true
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn can_list(&self, info: &peerinfo::models::PeerInfo) -> bool {
|
|
|
@ -1,12 +1,4 @@
|
||||||
{ inputs }:
|
{ inputs }:
|
||||||
let
|
|
||||||
overlays = [
|
|
||||||
./zipline
|
|
||||||
./bitwarden
|
|
||||||
./attic
|
|
||||||
];
|
|
||||||
importedOverlays = map (m: import m) overlays;
|
|
||||||
in
|
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
final: prev:
|
final: prev:
|
||||||
|
@ -15,15 +7,12 @@ in
|
||||||
pkgFrom = flake: pkg: flake.packages.${prev.system}.${pkg};
|
pkgFrom = flake: pkg: flake.packages.${prev.system}.${pkg};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
conduwuit = pkgFrom inputs.conduwuit "default";
|
|
||||||
attic-server = pkgFrom inputs.attic "attic-server";
|
|
||||||
attic = pkgFrom inputs.attic "attic";
|
|
||||||
garage = (
|
garage = (
|
||||||
(pkgFrom inputs.garage "default").overrideAttrs {
|
(pkgFrom inputs.garage "default").overrideAttrs {
|
||||||
meta.mainProgram = "garage";
|
meta.mainProgram = "garage";
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
nil = pkgFrom inputs.nil "default";
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
++ importedOverlays
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
final: prev: {
|
|
||||||
vscode-extensions = prev.vscode-extensions // {
|
|
||||||
github = prev.vscode-extensions.github // {
|
|
||||||
codespaces = prev.vscode-utils.buildVscodeMarketplaceExtension {
|
|
||||||
mktplcRef = {
|
|
||||||
publisher = "github";
|
|
||||||
name = "codespaces";
|
|
||||||
version = "1.17.3";
|
|
||||||
hash = "sha256-idJFYHJ4yeqpFZBX55Y0v1yfzgqyhS0MrC4yIto7i7w=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
final: prev: {
|
|
||||||
zipline = prev.zipline.overrideAttrs {
|
|
||||||
patches = [
|
|
||||||
./no-check-bucket.patch
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
diff --git a/src/lib/datasource/S3.ts b/src/lib/datasource/S3.ts
|
|
||||||
index 089dd64..39dd8f4 100644
|
|
||||||
--- a/src/lib/datasource/S3.ts
|
|
||||||
+++ b/src/lib/datasource/S3.ts
|
|
||||||
@@ -4,7 +4,6 @@ import {
|
|
||||||
DeleteObjectCommand,
|
|
||||||
DeleteObjectsCommand,
|
|
||||||
GetObjectCommand,
|
|
||||||
- ListBucketsCommand,
|
|
||||||
ListObjectsCommand,
|
|
||||||
PutObjectCommand,
|
|
||||||
S3Client,
|
|
||||||
@@ -38,32 +37,6 @@ export class S3Datasource extends Datasource {
|
|
||||||
endpoint: this.options.endpoint ?? undefined,
|
|
||||||
forcePathStyle: this.options.forcePathStyle ?? false,
|
|
||||||
});
|
|
||||||
-
|
|
||||||
- this.ensureBucketExists();
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- private async ensureBucketExists() {
|
|
||||||
- try {
|
|
||||||
- const res = await this.client.send(new ListBucketsCommand());
|
|
||||||
- if (res.$metadata.httpStatusCode !== 200) {
|
|
||||||
- this.logger
|
|
||||||
- .error('there was an error while listing buckets', res.$metadata as Record<string, unknown>)
|
|
||||||
- .error('zipline will now exit');
|
|
||||||
- process.exit(1);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (!res.Buckets?.find((bucket) => bucket.Name === this.options.bucket)) {
|
|
||||||
- this.logger.error(`bucket ${this.options.bucket} does not exist`).error('zipline will now exit');
|
|
||||||
- process.exit(1);
|
|
||||||
- }
|
|
||||||
- } catch (e) {
|
|
||||||
- this.logger
|
|
||||||
- .error('there was an error while listing buckets', e as Record<string, unknown>)
|
|
||||||
- .error('zipline will now exit');
|
|
||||||
- process.exit(1);
|
|
||||||
- } finally {
|
|
||||||
- this.logger.debug(`bucket ${this.options.bucket} exists`);
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
|
|
||||||
public async get(file: string): Promise<Readable | null> {
|
|
39
secrets/services/authelia.yaml
Normal file
39
secrets/services/authelia.yaml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
authelia:
|
||||||
|
jwt: ENC[AES256_GCM,data:L20XZt1eYz1srY+xIliasq4x2guxNIUOM4mVTPe/1uS2wQY6h1uY9n7yoMQ=,iv:OhTuutHQOVLG/CjX3m839Acw9eq/Yh3Iy947km1jalQ=,tag:nq/lwsfGSzeH6RsXLzr24g==,type:str]
|
||||||
|
storage: ENC[AES256_GCM,data:RW15TzoZifv0xrVAfrM7yFXv1ISp7v1c20PL4nGkQrXwjablPKQa5IZ0Fvg=,iv:YQ7+2h4O0Qx9BqnFU7WMaZuPtKU4BUo56/KPq2NQYxI=,tag:LQ8gWhf9rblGkN5bhPHPIQ==,type:str]
|
||||||
|
session: ENC[AES256_GCM,data:fJY4uSKRIcHDyDqndT9YiolOX1HDw2BphoaZONAv8AhdPV+aG5qj9Ppy3Rw=,iv:dcFZyIdZQQlyAORudsUCCD2wx4Sc7NF0dh/v/M6iYko=,tag:vBYU58mL7DecMqhX/TUdVg==,type:str]
|
||||||
|
hmac: ENC[AES256_GCM,data:K/qiyibBlu9wNh9IINHgYQiEZMromSA9Kf0iRVHPVuuhhUBZRyyfFyd4sLYNDLWvYKRJGnTBniIscQuBR+HU3/ttFGN0EkDsuAXlW3tKyLSxTiVgEvsKhA==,iv:2femAZUtSE9DjopiRIRT3Be3T2Qi0J+b8TaNJZ9vcjw=,tag:Sb7TT+1uxtStv20oM8oa8A==,type:str]
|
||||||
|
oidc_private: ENC[AES256_GCM,data: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,iv:GTKiBIir9+G3Lh45x77KARxi7paEsGP1m0qVldRnuOw=,tag:eCsjDzyO1g2HvnDhR/Gb4w==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1sy0at69err83qyml2vqu8xvwjccfws447aaadfvacj2qluw3p45s2mtrw8
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJOG1menBCTTF3YURCOThM
|
||||||
|
Q3Z4bnZJYmtQY1RmdTBSeFlhZCtUVzg4Qm5ZClo5NFJqaWg3NElKQjRLcFZGdmxP
|
||||||
|
cFMwOGxoelJlVnJNamUxWFhETWpiY3cKLS0tIFNDWGRkYVZQWTd2YXg2aGswbmJz
|
||||||
|
MVJQdDV3ZGdzd3NYL29tYU51NndiNmcKtagAZdoZQo0y0atvRI6f1tY/3j8aD4RP
|
||||||
|
yvs9RVDdNqm990O5EudjMNhoKLXnFQtX9NlzYVHzrsX0UT/HSUi7mQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age10h6pg5qdpc4t0rpmksfv788a57f04n83zgqaezkjjn65nkhv547s0vxfdn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0K2tGaktsdXVPN3g0bXps
|
||||||
|
ZkVWamZGc0QzNk1TaVdla1RDaW90TVpYb25rCmRPL29ZNFFCbVkrbVpseW5SZlFN
|
||||||
|
dmlLWHVBb1RMb1dvY3NKNHc3NEpMZFEKLS0tIFluRGN6U2paVzVBdCt4d3FyMVZ4
|
||||||
|
Nkx5aHo4Qk8vU01wazdWdmhvNWRLQTAK7kiQiEdF1LpzQ/syjRjyhchShrnfhHFE
|
||||||
|
M/XWLSIcnnApt1dOyJhJlpsQTnT6Y6Fqem0y779/uOQCBJGavscOWw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1eg6sxflw6l44fp20sl068sampwd95fm0mnh4ssegrhtktgm50ptqcuspyn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzK2U3YlRLK3BuK1Q0TkYy
|
||||||
|
SE1lTkVXUUV4NFVuT2V2VjdqUFpBbVFLSTJnCjI3c0xpMnBnV0M0Q0ZHYTdUSVZl
|
||||||
|
MWNMQXowWitFVTlIMFBadVJ6OHBBR28KLS0tIHJ1M0NkZzFMSndIUjBwN2tFUmF5
|
||||||
|
b2pGTmJva2VnOFZlRWxlOW5wMitDUkkKrZyzpch6jTSsumseBEaN8xQXfng4P7ds
|
||||||
|
JSoock3sEmL4NSfxXSu+PP8kEOXFtu1yAcmSSeVDDhV7jiwE4egu2Q==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2025-04-02T14:06:11Z"
|
||||||
|
mac: ENC[AES256_GCM,data:wK8Nb1Vb80UfolzqZOpifZdoEKYu847anowYiCdSluoK+dfHhDhCj7ZxznYV7SwVACIoLsqLR5syRzC861PRBrAujkhbcn7lTc1kQRCjw0gMAbPYR/xiO76EHmiYqnV2UMN0EmuQg1nIRIWY9EO9C7m1b9fjoZFgDsj/7O99aVU=,iv:CJxUKpyNgEYwqLhSvuXoHb+Hu3M7ydKh0WlsjlOtKkM=,tag:4KXmNwwFrqvBjxe656Jvug==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.10.1
|
|
@ -1,10 +1,6 @@
|
||||||
hedgedoc:
|
hedgedoc:
|
||||||
env: ENC[AES256_GCM,data:15rWiIYWyIJ0Hxl5I8m+EBV+FkNDT/OHlLK9shVS46UE7SQtuIh45N5hvwgs0rg9E9Tawu+lyE2aozWNh6HSDUZ1h4FYrB+JHwIetGkOqXSLHfXi,iv:v9ohLTtlxw3fsRoJJoOY5VYxVsxUyDEsQHRjcGKg/GY=,tag:Wncm1reqNblnVhRTYjU3Pg==,type:str]
|
env: ENC[AES256_GCM,data:9xnOlQrk1qCyiAHSjmu8dvj2/z/BrJlngNGAQnMwvLsL0pnyvvyJLnYWTDYix1a9o8OJUNLw6Qhq7KbY4uXfxsNZkfGdVHwvkvhySjR2rcX/r90txqHJUUIxE/TzdsBvonzQ0F85KfXhsi69gKHp016gCj+jNf6CCY+tOVpt71el4Z+jzqLHasuQET8GctKJRzHOfNfCx/X2kJeb7RQl3JFC6/VmYT45bUk7uFfveFD9ao03wJwLKi27wO1WDrfpOigFdvkmqpbWZjaILYHYmkdhdlhr7w330CiCmGHT/ssmSPcu5cYUc8tjYPgpYLjusiUzpE5jmut5GaNwZsY9hNuow/mUVnQ/tCDH0ChOq0DQisJ07VMYlRII9tMdcuT4IbjjwiRcYlORAHsTFUuo5DCaDp8a4mx846BGp1YMQsvqJQgOe4x15VMpeB/ptxm79qxcLZKZ3BkiJaKmDdWsVk9RfqVgsxqiq16Me2EQhknO2s/oBjGOaoIiT4NEuRFQl0BIPgIMD0lYzKx0uDaYyclID5W0DqMI+SrcBd+WH/BB9HPdZx92rFe34PzjZse0i6+5UZHXUu8au6CyLMqGkUlzkSFwVT5W7Lv2m9P3+6YjgPRMaYbg8b6kmavB6EtjiqWtTbMKr3nxPVYJc5FRImvebfFqiLy5MWoNV6Qe7TUGIk6QtX2OWBhQ1UB+IpR+180QH7yw7UpgJ9EM8dD2m2/smar5P0BjAaqAFib++GzoB0OfFtxJNUjrejQC11tRWBXYvcHWwa78VbKPul0xqiEMmsAZufMix4lD1EgutTf1CXfv7l0rUpLwkYbWIq2hT5UI53L0YWJDl7zlhi94ANdXV8z8kCvMeXm2Fwl/vIgJ9JuFeVeVYPpXwx2coLBwE6uI4SuFvY1d4ojvzY8KftcHWO7srVzpuwrwW+6gKLwPQyEazv+sRKXAGo0ffMO2/2KRgOu9zGwaOFaNDAZ6gYFDWbPz6TMfNWHzfLEFK5BlVAL8KDb78IODUBYcMr2CX1Y=,iv:LDkuJgxIbohEVf7wmdtOZ/vlPddMYa7uzHGkL+0MnUM=,tag:pnJiCJydjTmUbS761fPUPw==,type:str]
|
||||||
sops:
|
sops:
|
||||||
kms: []
|
|
||||||
gcp_kms: []
|
|
||||||
azure_kv: []
|
|
||||||
hc_vault: []
|
|
||||||
age:
|
age:
|
||||||
- recipient: age1eg6sxflw6l44fp20sl068sampwd95fm0mnh4ssegrhtktgm50ptqcuspyn
|
- recipient: age1eg6sxflw6l44fp20sl068sampwd95fm0mnh4ssegrhtktgm50ptqcuspyn
|
||||||
enc: |
|
enc: |
|
||||||
|
@ -24,8 +20,7 @@ sops:
|
||||||
enlDZEI2NElkZkI3UmRyQUZqQWE5ZmcK2JlwNzVJNhGjyniIg9UY5tjgUKttkT3e
|
enlDZEI2NElkZkI3UmRyQUZqQWE5ZmcK2JlwNzVJNhGjyniIg9UY5tjgUKttkT3e
|
||||||
9C/xag3dQCiqzX1O3o5tdhYnxXw+VxVf+qTFyyuftg5iQPZNuvX6mA==
|
9C/xag3dQCiqzX1O3o5tdhYnxXw+VxVf+qTFyyuftg5iQPZNuvX6mA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2024-12-17T03:25:54Z"
|
lastmodified: "2025-04-05T21:08:15Z"
|
||||||
mac: ENC[AES256_GCM,data:1cxiK/HhqYzatT2PhZxjvtizII2QMHqbbyOujUtx4cT8x488j2wecu6hOfSkuHbQ43AxA8kDH1NAruPCSdCpj3PytMR+np+R/5WuRcK+OF/FCnWvWvvHqgDnBs/wYjllnR6HyWBlhrROpINxu9ch4fzN0Def3I7O+wJgpojnPiU=,iv:PKPykPv9zSHj9+HXnrg1v8Ty78te66D9ZH6c1V7Qlh4=,tag:JQk68u6p317r3Df+hv16+g==,type:str]
|
mac: ENC[AES256_GCM,data:cPisYUoZWd/vd+wWzz3xTnftj1RdjK20dWFo+MKssm/eu7eCOWDIaZdcJg13gkTleBpMWQy/mG1drC6GLfGQiBmkS99UCPAoo0aLTBL4FbSm6FEXdbVjoOI7URu6Sj31drWCMAm+lXYymWsHwZJrNLhjsCTQsxTPvFq8oOdNlXo=,iv:KpmJoZ/BGEEhZ75jXfXxegNglm7k6mtleRuVud6tX2g=,tag:lsiqX+YSz4mGK6mw9gdKNg==,type:str]
|
||||||
pgp: []
|
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.9.2
|
version: 3.10.1
|
||||||
|
|
35
secrets/services/karakeep.yaml
Normal file
35
secrets/services/karakeep.yaml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
karakeep:
|
||||||
|
env: ENC[AES256_GCM,data:SWc26EQaKR5d9hMDYzVHA/r7XfjwFZ0d44Co0IS6OayR24ej7yqLAtkNttROKoKFuYc0sHgN9bOy4MyX0s3qiSWYovIIUJgFiJjPQFYDAo+50WR4+5W5FgvYI6e42fcWrQhaCXWQrDyzch/zT2OITZsjXcQhT5E+IiPLVkaGOjGptE07GjM7ZXI4UxBzINFQOhxdfIO0km1o6Wq8GhJdWsz4exz4ahRslR+WjK/flV2GZVAj6EHSJ5sHohm74QlhxaShEbc/8IKP6R2gSjBFP7l8VvwFyIUD9sLzYGvS3iU=,iv:gSPQU0bZ+VRFbuaNDc90dW0ogWX2SMH7kewtq/u/11E=,tag:L0Y4EWSQUhcn2eHt+yZ7qQ==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- recipient: age1sy0at69err83qyml2vqu8xvwjccfws447aaadfvacj2qluw3p45s2mtrw8
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIaWQ1Q1JwRHJxQjNjdTAx
|
||||||
|
TXRsWjVZOG1mNEptNVhscHBaK2I5MHhjdlFjCkNqOEhwT3hyOHpHQ2k0ZmowUXB4
|
||||||
|
eks2dlpUS0V6VjBEYW9UWnhFOEw4VGsKLS0tIFo2a0FTRE5WdHBGVW5DOUFkaE9p
|
||||||
|
bitvUnJXSnB6UnV3VTEzSjlSYmEwVUEKHOwFCRu+SIyM0uJ6bNEAo+MMlsc8la6G
|
||||||
|
bLYdCoykcBu+uVXqn3BYTbrS5ylQMRYcbcPFJw5BVdmjIYF4LU5W6A==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age10h6pg5qdpc4t0rpmksfv788a57f04n83zgqaezkjjn65nkhv547s0vxfdn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrU2ZnNVAyeVdJeHlTSW1x
|
||||||
|
QUhKRzlNclVUWE1ucHFLZW5sL1lnUDhkd0Y4CjFuekNEOE1icDNqL1JyT0hEYW16
|
||||||
|
Q2VyajJFWWtGUnBzOENGOEZHbWROZzAKLS0tIE8wMVc3TkV5Y1VyenIvOW02NDNq
|
||||||
|
cStTeUcvY1pJWEN2MzFEeThKT0JPc1EKXrtVG49a6YZVKiL1F8Xg3t3niTYv3LwN
|
||||||
|
NeAQ8srV0F6ckky7OCkvUp9GInZCWRzULXV/x+4IUb6C+KQaNm2vYA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
- recipient: age1eg6sxflw6l44fp20sl068sampwd95fm0mnh4ssegrhtktgm50ptqcuspyn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFdDdUSUlmMk5VcytyT01N
|
||||||
|
UmRaK2k5Wkh5SlhPT3QrczY2eW9vZk5KWFZBCnBteitnNFlHdWRaaTRxSWYvYmtG
|
||||||
|
ZnY5ZXlYa3Z5aENlRy9BQjVSU1F3UzQKLS0tIFpjN1dOaWNKaU9PaENyaXc1K3BU
|
||||||
|
K2orZ0Y2Z05LSUZ5WHQ4TnVVY0QwSzQKiUQT4aSxXnaq0kEMp+q5WnIUoGypEmZ+
|
||||||
|
DQEhkB9yu/BrkjXH+HGQr1W5B4sJyb5rnl0+SQ+IypRIRyaX4CdFxg==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2025-04-05T19:44:58Z"
|
||||||
|
mac: ENC[AES256_GCM,data:OmqsJI9BaICOTiH1cq4gZlNBbkAxn/pAOWBtkIjHdqpikABLG6fMY+sLpyeaovXjexIj9MZk7fPmV8dRZ5VNLHCqlYXK/cVoQBZ2HK+p/cGTAFelNAShu9NSgZdFmVgJJtOjVvFp8dtuY8VcQj861k/MPX0mNZt9pmXYdumjpNM=,iv:efHkp1KUctwtCjG9A8i5qs7nQfQqv2ya1yYlHHOt8pU=,tag:4lChpspl0oOUMiXzvGuA2Q==,type:str]
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.10.1
|
Loading…
Add table
Add a link
Reference in a new issue