Compare commits

...

29 Commits

Author SHA1 Message Date
Noah Masur
9ec448ad9c move keybinds to sxhkd 2023-08-06 16:38:37 -04:00
Noah Masur
f22768545b start to add sway config 2023-08-06 16:38:37 -04:00
Noah Masur
6a0e70568a remove litestream docs from nextcloud
now that i've migrated from sqlite to mariadb
2023-08-06 16:38:24 -04:00
Noah Masur
9b44d8f171 add jujutsu vcs 2023-08-06 16:37:53 -04:00
Noah Masur
1cf3405103 add readme for each directory 2023-08-06 08:01:21 -04:00
Noah Masur
7439d4bf39 fix: lightdm not showing username 2023-08-06 07:30:40 -04:00
github-actions[bot]
316c33e66c flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/16c07487ac9bc59f58b121d13160c67befa3342e' (2023-07-27)
  → 'github:lnl7/nix-darwin/829041cf10c4f6751a53c0a11ca2fd22ff0918d6' (2023-08-05)
• Updated input 'disko':
    'github:nix-community/disko/43f17a8b31c49f6696b8b258d317161afdc7e36b' (2023-07-28)
  → 'github:nix-community/disko/4015740375676402a2ee6adebc3c30ea625b9a94' (2023-07-30)
• Updated input 'firefox-darwin':
    'github:bandithedoge/nixpkgs-firefox-darwin/69010f2ef9fbcef70d12541910ccc6db7a9997db' (2023-07-28)
  → 'github:bandithedoge/nixpkgs-firefox-darwin/6081c33185dba05da784d9f2a392861af025bf1a' (2023-08-05)
• Updated input 'hmts-nvim-src':
    'github:calops/hmts.nvim/725300f46d702529a739d2e6ef84758b6003d135' (2023-08-03)
  → 'github:calops/hmts.nvim/1d40963804925754672940d07ddb250d19efec2e' (2023-08-05)
• Updated input 'home-manager':
    'github:nix-community/home-manager/f58889c07efa8e1328fdf93dc1796ec2a5c47f38' (2023-07-29)
  → 'github:nix-community/home-manager/0a014a729cdd54d9919ff36b714d047909d7a4c8' (2023-08-05)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/2a9d660ff0f7ffde9d73be328ee6e6f10ef66b28' (2023-07-28)
  → 'github:nixos/nixpkgs/18036c0be90f4e308ae3ebcab0e14aae0336fe42' (2023-08-04)
• Updated input 'nur':
    'github:nix-community/nur/1c4ba84e2cbfd43976a0fd3f848b536611735a79' (2023-07-30)
  → 'github:nix-community/nur/cf2f5d8ad452795e5aca290c95eedc829d3da7ec' (2023-08-06)
• Updated input 'nvim-tree-lua-src':
    'github:kyazdani42/nvim-tree.lua/4bd30f0137e44dcf3e74cc1164efb568f78f2b02' (2023-07-29)
  → 'github:kyazdani42/nvim-tree.lua/904f95cd9db31d1800998fa428e78e418a50181d' (2023-08-06)
2023-08-06 03:47:21 +00:00
Noah Masur
c845ae2fd4 use ssh host key as identityfile on tempest
reencrypt secrets and use personal key for mail
2023-08-05 20:06:03 -04:00
Noah Masur
5bc10bef87 improve hosts documentation 2023-08-05 17:14:26 -04:00
Noah Masur
f0e1fc740f save ratbag profile to text
move misc data files to misc directory
2023-08-05 16:55:37 -04:00
Noah Masur
5826877ad2 more zfs docs 2023-08-05 14:59:09 -04:00
Noah Masur
d3b0f21313 initial zfs documentation 2023-08-05 14:44:24 -04:00
Noah Masur
b7d1921c4d provision grafana alerts and smtp 2023-08-05 14:21:49 +00:00
Noah Masur
de1337bf58 fix: failure to provision 2023-08-05 13:03:17 +00:00
Noah Masur
3cff7e090c fix: port is an integer 2023-08-05 01:20:38 +00:00
Noah Masur
21794891e7 grafana provisioning
convert grafana dashboard to nix native

remove grafana yml file
2023-08-04 21:15:38 -04:00
Noah Masur
20e5d7fef5 disable hmts because it's buggy 2023-08-04 05:14:05 +00:00
Noah Masur
b6a6c761e9 fix warnings in nextcloud 2023-08-04 05:13:43 +00:00
Noah Masur
fc4bd9e4a8 hmts: tree-sitter injections for home-manager 2023-08-03 16:06:47 -04:00
Noah Masur
25e3de5058 fix: output hash for nextcloud apps 2023-08-03 02:30:11 +00:00
Noah Masur
9694467ba0 try making nextcloud apps as flake inputs 2023-08-02 22:27:28 -04:00
Noah Masur
71e6780439 fix: wrong order of args 2023-08-02 21:50:26 -04:00
Noah Masur
e6d0852be0 try refactoring overlays into flake inputs 2023-08-02 11:51:11 -04:00
Noah Masur
00564c0c40 switch nextcloud to nix-based apps 2023-08-02 12:26:45 +00:00
Noah Masur
57b38a417e switch nextcloud from sqlite to mysql 2023-08-02 11:32:54 +00:00
Noah Masur
7f9ce5925e add undodir to hopefully fix short undo history
seems like undo history was being lost after committing to git
2023-08-01 11:05:41 -04:00
Noah Masur
5ce9a26441 fix: exa ls not showing group names 2023-08-01 08:14:06 -04:00
Noah Masur
73680961a0 bring back docker-cleanup file
just for safekeeping
2023-08-01 08:13:17 -04:00
Noah Masur
c59e914430 attempt to fix rofi power confirm issues 2023-07-31 23:00:30 -04:00
75 changed files with 3396 additions and 604 deletions

9
apps/README.md Normal file
View File

@ -0,0 +1,9 @@
# Apps
These are all my miscellaneous utilies and scripts to accompany this project.
They can be run with:
```
nix run github:nmasur/dotfiles#appname
```

View File

@ -11,7 +11,7 @@
tmpfile=$(mktemp)
echo "''${secret}" > ''${tmpfile}
${pkgs.age}/bin/age --encrypt --armor --recipients-file ${
builtins.toString ../public-keys
builtins.toString ../misc/public-keys
} $tmpfile
rm $tmpfile
'');

View File

@ -17,8 +17,8 @@
--foreground "#fb4934" \
"Missing required parameter." \
"Usage: installer -- <disk> <host>" \
"Example: installer -- nvme0n1 desktop" \
"Flake example: nix run github:nmasur/dotfiles#installer -- nvme0n1 desktop"
"Example: installer -- nvme0n1 tempest" \
"Flake example: nix run github:nmasur/dotfiles#installer -- nvme0n1 tempest"
echo "(exiting)"
exit 1
fi

View File

@ -17,7 +17,7 @@
--identity ~/.ssh/id_ed25519 $encryptedfile > $tmpfile
echo "Encrypting ''${encryptedfile}..."
${pkgs.age}/bin/age --encrypt --armor --recipients-file ${
builtins.toString ../public-keys
builtins.toString ../misc/public-keys
} $tmpfile > $encryptedfile
rm $tmpfile
done

5
colorscheme/README.md Normal file
View File

@ -0,0 +1,5 @@
# Colorschemes
Color information for different themes is found here. The colors are sourced
and used with [base16](https://github.com/chriskempson/base16) format
consistently across the system.

5
disks/README.md Normal file
View File

@ -0,0 +1,5 @@
# Disks
These are my [disko](https://github.com/nix-community/disko) configurations,
which allow me to save desired disk formatting layouts as a declarative file so
I don't have to remember how to format my disks later on.

4
docs/README.md Normal file
View File

@ -0,0 +1,4 @@
# Documentation
Reference documents for some of the more complicated services and maintenance
tasks.

65
docs/repair-nextcloud.md Normal file
View File

@ -0,0 +1,65 @@
# Repairing Nextcloud
You can run the maintenance commands like this:
```
sudo -u nextcloud nextcloud-occ maintenance:mode --on
sudo -u nextcloud nextcloud-occ maintenance:repair
sudo -u nextcloud nextcloud-occ maintenance:mode --off
```
## Rescan Files
```
sudo -u nextcloud nextcloud-occ files:scan --all
```
## Converting from SQLite to MySQL (mariadb)
First: keep Nextcloud set to SQLite as its dbtype, and separately launch MySQL
as a service by copying the configuration found
[here](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/web-apps/nextcloud.nix).
No password is necessary, since the user-based auth works with UNIX sockets.
You can connect to the MySQL instance like this:
```
sudo -u nextcloud mysql -S /run/mysqld/mysqld.sock
```
Create a blank database for Nextcloud:
```sql
create database nextcloud;
```
Now setup the [conversion](https://docs.nextcloud.com/server/17/admin_manual/configuration_database/db_conversion.html):
```
sudo -u nextcloud nextcloud-occ db:convert-type mysql nextcloud localhost nextcloud
```
Ignore the password prompt. Proceed with the conversion.
Now `config.php` will be updated but the override config from NixOS will not
be. Now update your NixOS configuration:
- Remove the `mysql` service you created.
- Set `dbtype` to `mysql`.
- Set `database.createLocally` to `true`.
Rebuild your configuration.
Now, make sure to enable [4-byte
support](https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/mysql_4byte_support.html)
in the database.
## Backing Up MySQL Database
Use this mysqldump command:
```
sudo -u nextcloud mysqldump -S /run/mysqld/mysqld.sock --default-character-set=utf8mb4 nextcloud > backup.sql
```

View File

@ -1,43 +0,0 @@
# Restoring Nextcloud From Backup
Install the `litestream` package.
```
nix-shell --run fish -p litestream
```
Set the S3 credentials:
```
set -x AWS_ACCESS_KEY_ID (read)
set -x AWS_SECRET_ACCESS_KEY (read)
```
Restore from S3:
```
litestream restore -o nextcloud.db s3://noahmasur-backup.s3.us-west-002.backblazeb2.com/nextcloud
```
Install Nextcloud. Then copy DB:
```
sudo rm /data/nextcloud/data/nextcloud.db*
sudo mv nextcloud.db /data/nextcloud/data/
sudo chown nextcloud:nextcloud /data/nextcloud/data/nextcloud.db
sudo chmod 770 /data/nextcloud/data/nextcloud.db
```
Restart Nextcloud:
```
sudo systemctl restart phpfpm-nextcloud.service
```
Adjust Permissions and Directories:
```
sudo mkdir /data/nextcloud/data/noah/files
sudo chown nextcloud:nextcloud /data/nextcloud/data/noah/files
```

45
docs/zfs.md Normal file
View File

@ -0,0 +1,45 @@
# ZFS
Swan runs its root on ext4. The ZFS drives are managed imperatively (this
[disko configuration](../disks/zfs.nix) is an unused work-in-progress).
The basic ZFS settings are managed [here](../modules/nixos/hardware/zfs.nix).
## Creating a New Dataset
```
sudo zfs create tank/mydataset
sudo zfs set compression=zstd tank/myzstddataset
sudo zfs set mountpoint=/data/mydataset tank/mydataset
```
## Maintenance
### Get Status
```
sudo zpool status
```
### Replace Disk
```
sudo zdb
sudo zpool status -g # Show by GUID
sudo zpool offline tank <GUID>
sudo zpool status
# Remove old disk, insert new disk
sudo zdb
sudo zpool replace tank <OLD GUID> /dev/disk/by-id/<NEW PATH>
sudo zpool status
```
## Initial Setup
```
sudo zpool create tank raidz1 sda sdb sdc
sudo zpool set ashift=12 tank
sudo zpool set autoexpand=on tank
sudo zpool set compression=on tank
```

View File

@ -73,11 +73,11 @@
]
},
"locked": {
"lastModified": 1690431538,
"narHash": "sha256-Uml8ivMMOFPB9fNSDcw72imGHRdJpaK12sRm2DTLLe8=",
"lastModified": 1691275315,
"narHash": "sha256-9WN0IA0vNZSNxKHpy/bYvPnCw4VH/nr5iBv7c+7KUts=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "16c07487ac9bc59f58b121d13160c67befa3342e",
"rev": "829041cf10c4f6751a53c0a11ca2fd22ff0918d6",
"type": "github"
},
"original": {
@ -94,11 +94,11 @@
]
},
"locked": {
"lastModified": 1690548222,
"narHash": "sha256-EcVjLOpbAuL/y55fLlEl3BNM4FP5Pwtp+6DbTiL6FDM=",
"lastModified": 1690739034,
"narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=",
"owner": "nix-community",
"repo": "disko",
"rev": "43f17a8b31c49f6696b8b258d317161afdc7e36b",
"rev": "4015740375676402a2ee6adebc3c30ea625b9a94",
"type": "github"
},
"original": {
@ -114,11 +114,11 @@
]
},
"locked": {
"lastModified": 1690505116,
"narHash": "sha256-ec0yX+DdfGtw2TQnG29jt1X/89OHTF0VsRrpp0+7s8Y=",
"lastModified": 1691196340,
"narHash": "sha256-b1haFWCbFJkiUkeTQCkNjr8hFq/8JlMPaQwNpGlcvxI=",
"owner": "bandithedoge",
"repo": "nixpkgs-firefox-darwin",
"rev": "69010f2ef9fbcef70d12541910ccc6db7a9997db",
"rev": "6081c33185dba05da784d9f2a392861af025bf1a",
"type": "github"
},
"original": {
@ -194,6 +194,22 @@
"type": "github"
}
},
"hmts-nvim-src": {
"flake": false,
"locked": {
"lastModified": 1691223193,
"narHash": "sha256-Zsl4s3e4upWiU2mXKqiQcUGxslPzzebKKXfzaHiNq48=",
"owner": "calops",
"repo": "hmts.nvim",
"rev": "1d40963804925754672940d07ddb250d19efec2e",
"type": "github"
},
"original": {
"owner": "calops",
"repo": "hmts.nvim",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@ -201,11 +217,11 @@
]
},
"locked": {
"lastModified": 1690652600,
"narHash": "sha256-Dy09g7mezToVwtFPyY25fAx1hzqNXv73/QmY5/qyR44=",
"lastModified": 1691225770,
"narHash": "sha256-O5slH8nW8msTAqVAS5rkvdHSkjmrO+JauuSDzZCmv2M=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "f58889c07efa8e1328fdf93dc1796ec2a5c47f38",
"rev": "0a014a729cdd54d9919ff36b714d047909d7a4c8",
"type": "github"
},
"original": {
@ -215,6 +231,42 @@
"type": "github"
}
},
"nextcloud-cookbook": {
"flake": false,
"locked": {
"narHash": "sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M=",
"type": "tarball",
"url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz"
}
},
"nextcloud-external": {
"flake": false,
"locked": {
"narHash": "sha256-gY1nxqK/pHfoxW/9mE7DFtNawgdEV7a4OXpscWY14yk=",
"type": "tarball",
"url": "https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz"
}
},
"nextcloud-news": {
"flake": false,
"locked": {
"narHash": "sha256-hhXPEITSbCiFs0o+TOsQnSasXBpjU9mA/OFsbzuaCPw=",
"type": "tarball",
"url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz"
}
},
"nil": {
"inputs": {
"flake-utils": "flake-utils",
@ -297,11 +349,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1690548937,
"narHash": "sha256-x3ZOPGLvtC0/+iFAg9Kvqm/8hTAIkGjc634SqtgaXTA=",
"lastModified": 1691186842,
"narHash": "sha256-wxBVCvZUwq+XS4N4t9NqsHV4E64cPVqQ2fdDISpjcw0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2a9d660ff0f7ffde9d73be328ee6e6f10ef66b28",
"rev": "18036c0be90f4e308ae3ebcab0e14aae0336fe42",
"type": "github"
},
"original": {
@ -345,11 +397,11 @@
},
"nur": {
"locked": {
"lastModified": 1690721668,
"narHash": "sha256-550poDnDiMXLPQBJnUwhEzv0ZC4zjiFiwTaOIi3jfs4=",
"lastModified": 1691289987,
"narHash": "sha256-sbbDlVzxlP+bBTdhyyzJ6C0APUNU/sChuLmNU9ehkmg=",
"owner": "nix-community",
"repo": "nur",
"rev": "1c4ba84e2cbfd43976a0fd3f848b536611735a79",
"rev": "cf2f5d8ad452795e5aca290c95eedc829d3da7ec",
"type": "github"
},
"original": {
@ -378,11 +430,11 @@
"nvim-tree-lua-src": {
"flake": false,
"locked": {
"lastModified": 1690616703,
"narHash": "sha256-kTbYvT21wLfiwEpQAgGZtep2GP4F9e7e6XGVpr4D1hY=",
"lastModified": 1691292370,
"narHash": "sha256-YQRirmp8QerxwF9qdrSrUKJZiVrBb6ZWpUTfM8H7fl4=",
"owner": "kyazdani42",
"repo": "nvim-tree.lua",
"rev": "4bd30f0137e44dcf3e74cc1164efb568f78f2b02",
"rev": "904f95cd9db31d1800998fa428e78e418a50181d",
"type": "github"
},
"original": {
@ -417,7 +469,11 @@
"darwin": "darwin",
"disko": "disko",
"firefox-darwin": "firefox-darwin",
"hmts-nvim-src": "hmts-nvim-src",
"home-manager": "home-manager",
"nextcloud-cookbook": "nextcloud-cookbook",
"nextcloud-external": "nextcloud-external",
"nextcloud-news": "nextcloud-news",
"nil": "nil",
"nix2vim": "nix2vim",
"nixos-generators": "nixos-generators",
@ -430,9 +486,15 @@
"telescope-nvim-src": "telescope-nvim-src",
"telescope-project-nvim-src": "telescope-project-nvim-src",
"toggleterm-nvim-src": "toggleterm-nvim-src",
"tree-sitter-bash": "tree-sitter-bash",
"tree-sitter-ini": "tree-sitter-ini",
"tree-sitter-puppet": "tree-sitter-puppet",
"tree-sitter-python": "tree-sitter-python",
"tree-sitter-rasi": "tree-sitter-rasi",
"vscode-terraform-snippets": "vscode-terraform-snippets",
"wallpapers": "wallpapers",
"wsl": "wsl"
"wsl": "wsl",
"zenyd-mpv-scripts": "zenyd-mpv-scripts"
}
},
"rust-overlay": {
@ -540,6 +602,88 @@
"type": "github"
}
},
"tree-sitter-bash": {
"flake": false,
"locked": {
"lastModified": 1688032601,
"narHash": "sha256-gl5F3IeZa2VqyH/qFj8ey2pRbGq4X8DL5wiyvRrH56U=",
"owner": "tree-sitter",
"repo": "tree-sitter-bash",
"rev": "493646764e7ad61ce63ce3b8c59ebeb37f71b841",
"type": "github"
},
"original": {
"owner": "tree-sitter",
"repo": "tree-sitter-bash",
"rev": "493646764e7ad61ce63ce3b8c59ebeb37f71b841",
"type": "github"
}
},
"tree-sitter-ini": {
"flake": false,
"locked": {
"lastModified": 1690815608,
"narHash": "sha256-IIpKzpA4q1jpYVZ75VZaxWHaqNt8TA427eMOui2s71M=",
"owner": "justinmk",
"repo": "tree-sitter-ini",
"rev": "7f11a02fb8891482068e0fe419965d7bade81a68",
"type": "github"
},
"original": {
"owner": "justinmk",
"repo": "tree-sitter-ini",
"type": "github"
}
},
"tree-sitter-puppet": {
"flake": false,
"locked": {
"lastModified": 1690231696,
"narHash": "sha256-YEjjy9WLwITERYqoeSVrRYnwVBIAwdc4o0lvAK9wizw=",
"owner": "amaanq",
"repo": "tree-sitter-puppet",
"rev": "9ce9a5f7d64528572aaa8d59459ba869e634086b",
"type": "github"
},
"original": {
"owner": "amaanq",
"repo": "tree-sitter-puppet",
"type": "github"
}
},
"tree-sitter-python": {
"flake": false,
"locked": {
"lastModified": 1690493803,
"narHash": "sha256-2btd/NRE6NuGNlx4cq535OrwtWXihiP3VMCJjPCiDOk=",
"owner": "tree-sitter",
"repo": "tree-sitter-python",
"rev": "5af00f64af6bbf822f208243cce5cf75396fb6f5",
"type": "github"
},
"original": {
"owner": "tree-sitter",
"repo": "tree-sitter-python",
"rev": "5af00f64af6bbf822f208243cce5cf75396fb6f5",
"type": "github"
}
},
"tree-sitter-rasi": {
"flake": false,
"locked": {
"lastModified": 1678701563,
"narHash": "sha256-2nYZoLcrxxxiOJEySwHUm93lzMg8mU+V7LIP63ntFdA=",
"owner": "Fymyte",
"repo": "tree-sitter-rasi",
"rev": "371dac6bcce0df5566c1cfebde69d90ecbeefd2d",
"type": "github"
},
"original": {
"owner": "Fymyte",
"repo": "tree-sitter-rasi",
"type": "github"
}
},
"vscode-terraform-snippets": {
"flake": false,
"locked": {
@ -591,6 +735,22 @@
"repo": "NixOS-WSL",
"type": "github"
}
},
"zenyd-mpv-scripts": {
"flake": false,
"locked": {
"lastModified": 1650625438,
"narHash": "sha256-OBCuzCtgfSwj0i/rBNranuu4LRc47jObwQIJgQQoerg=",
"owner": "zenyd",
"repo": "mpv-scripts",
"rev": "19ea069abcb794d1bf8fac2f59b50d71ab992130",
"type": "github"
},
"original": {
"owner": "zenyd",
"repo": "mpv-scripts",
"type": "github"
}
}
},
"root": "root",

View File

@ -111,6 +111,61 @@
url = "github:run-at-scale/vscode-terraform-doc-snippets";
flake = false;
};
hmts-nvim-src = {
url = "github:calops/hmts.nvim";
flake = false;
};
# Tree-Sitter Grammars
tree-sitter-bash = {
# Fix: bash highlighting doesn't work as of this commit:
# https://github.com/NixOS/nixpkgs/commit/49cce41b7c5f6b88570a482355d9655ca19c1029
url =
"github:tree-sitter/tree-sitter-bash/493646764e7ad61ce63ce3b8c59ebeb37f71b841";
flake = false;
};
tree-sitter-python = {
# Fix: invalid node in position. Broken as of this commit (replaced with newer):
# https://github.com/NixOS/nixpkgs/commit/8ec3627796ecc899e6f47f5bf3c3220856ead9c5
url =
"github:tree-sitter/tree-sitter-python/5af00f64af6bbf822f208243cce5cf75396fb6f5";
flake = false;
};
tree-sitter-ini = {
url = "github:justinmk/tree-sitter-ini";
flake = false;
};
tree-sitter-puppet = {
url = "github:amaanq/tree-sitter-puppet";
flake = false;
};
tree-sitter-rasi = {
url = "github:Fymyte/tree-sitter-rasi";
flake = false;
};
# MPV Scripts
zenyd-mpv-scripts = {
url = "github:zenyd/mpv-scripts";
flake = false;
};
# Nextcloud Apps
nextcloud-news = {
url =
"https://github.com/nextcloud/news/releases/download/22.0.0/news.tar.gz";
flake = false;
};
nextcloud-external = {
url =
"https://github.com/nextcloud-releases/external/releases/download/v5.2.0/external-v5.2.0.tar.gz";
flake = false;
};
nextcloud-cookbook = {
url =
"https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz";
flake = false;
};
};
@ -149,6 +204,9 @@
(import ./overlays/calibre-web.nix)
(import ./overlays/disko.nix inputs)
(import ./overlays/tree-sitter.nix inputs)
(import ./overlays/caddy.nix inputs)
(import ./overlays/mpv-scripts.nix inputs)
(import ./overlays/nextcloud-apps.nix inputs)
(import ./overlays/betterlockscreen.nix)
];

View File

@ -1,5 +1,7 @@
# Hosts
These are the individual machines managed by this flake.
| Host | Purpose |
| --- | --- |
| [aws](./aws/default.nix) | AWS AMI |

View File

@ -3,6 +3,7 @@
# How to install:
# https://blog.korfuri.fr/posts/2022/08/nixos-on-an-oracle-free-tier-ampere-machine/
# These days, probably use nixos-anywhere instead.
{ inputs, globals, overlays, ... }:
@ -21,32 +22,38 @@ inputs.nixpkgs.lib.nixosSystem {
server = true;
networking.hostName = "flame";
# Not sure what's necessary but too afraid to remove anything
imports = [ (inputs.nixpkgs + "/nixos/modules/profiles/qemu-guest.nix") ];
boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_pci" "usbhid" ];
# File systems must be declared in order to boot
# This is the root filesystem containing NixOS
# I forgot to set a clean label for it
fileSystems."/" = {
device = "/dev/disk/by-uuid/e1b6bd50-306d-429a-9f45-78f57bc597c3";
fsType = "ext4";
};
# This is the boot filesystem for systemd-boot
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/D5CA-237A";
fsType = "vfat";
};
# Theming
gui.enable = false;
theme = { colors = (import ../../colorscheme/gruvbox).dark; };
# Disable passwords, only use SSH key
publicKey =
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s";
# Server doesn't require GUI
gui.enable = false;
# Still require colors for programs like Neovim, K9S
theme = { colors = (import ../../colorscheme/gruvbox).dark; };
# Programs and services
cloudflare.enable = true; # Proxy traffic with Cloudflare
dotfiles.enable = true; # Clone dotfiles
neovim.enable = true;
giteaRunner.enable = true;
services.caddy.enable = true;
services.grafana.enable = true;
services.openssh.enable = true;
@ -55,6 +62,7 @@ inputs.nixpkgs.lib.nixosSystem {
services.vaultwarden.enable = true;
services.minecraft-server.enable = true; # Setup Minecraft server
# Allows private remote access over the internet
cloudflareTunnel = {
enable = true;
id = "bd250ee1-ed2e-42d2-b627-039f1eb5a4d2";
@ -63,8 +71,6 @@ inputs.nixpkgs.lib.nixosSystem {
"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBK/6oyVqjFGX3Uvrc3VS8J9sphxzAnRzKC85xgkHfYgR3TK6qBGXzHrknEj21xeZrr3G2y1UsGzphWJd9ZfIcdA= open-ssh-ca@cloudflareaccess.org";
};
giteaRunner.enable = true;
# Nextcloud backup config
backup.s3 = {
endpoint = "s3.us-west-002.backblazeb2.com";
@ -72,8 +78,9 @@ inputs.nixpkgs.lib.nixosSystem {
accessKeyId = "0026b0e73b2e2c80000000005";
};
# # Grant access to Jellyfin directories from Nextcloud
# users.users.nextcloud.extraGroups = [ "jellyfin" ];
# Disable passwords, only use SSH key
publicKey =
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s";
# # Wireguard config for Transmission
# wireguard.enable = true;
@ -104,9 +111,6 @@ inputs.nixpkgs.lib.nixosSystem {
# # VPN port forwarding
# services.transmission.settings.peer-port = 57599;
# # Grant access to Transmission directories from Jellyfin
# users.users.jellyfin.extraGroups = [ "transmission" ];
}
];
}

View File

@ -22,7 +22,7 @@ inputs.nixpkgs.lib.nixosSystem {
colors = (import ../../colorscheme/gruvbox).dark;
dark = true;
};
passwordHash = inputs.nixpkgs.lib.fileContents ../../password.sha512;
passwordHash = inputs.nixpkgs.lib.fileContents ../../misc/password.sha512;
wsl = {
enable = true;
wslConf.automount.root = "/mnt";

View File

@ -13,11 +13,14 @@ inputs.nixpkgs.lib.nixosSystem {
../../modules/common
../../modules/nixos
{
nixpkgs.overlays = overlays;
# Hardware
server = true;
physical = true;
networking.hostName = "swan";
# Not sure what's necessary but too afraid to remove anything
boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
@ -30,29 +33,43 @@ inputs.nixpkgs.lib.nixosSystem {
"amdgpu.cik_support=1"
"amdgpu.dc=1"
];
# Required binary blobs to boot on this machine
hardware.enableRedistributableFirmware = true;
# Prioritize efficiency over performance
powerManagement.cpuFreqGovernor = "powersave";
# Allow firmware updates
hardware.cpu.intel.updateMicrocode = true;
# ZFS
zfs.enable = true;
# Generated with: head -c 8 /etc/machine-id
networking.hostId = "600279f4"; # Random ID required for ZFS
# Sets root ext4 filesystem instead of declaring it manually
disko = {
enableConfig = true;
devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; });
};
# Automatically load the ZFS pool on boot
boot.zfs.extraPools = [ "tank" ];
# Theming
# Server doesn't require GUI
gui.enable = false;
# Still require colors for programs like Neovim, K9S
theme = { colors = (import ../../colorscheme/gruvbox).dark; };
nixpkgs.overlays = overlays;
# Programs and services
neovim.enable = true;
cloudflare.enable = true;
dotfiles.enable = true;
arrs.enable = true;
services.bind.enable = true;
services.caddy.enable = true;
services.jellyfin.enable = true;
@ -63,6 +80,7 @@ inputs.nixpkgs.lib.nixosSystem {
services.vmagent.enable = true;
services.samba.enable = true;
# Allows private remote access over the internet
cloudflareTunnel = {
enable = true;
id = "646754ac-2149-4a58-b51a-e1d0a1f3ade2";
@ -71,6 +89,7 @@ inputs.nixpkgs.lib.nixosSystem {
"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCHF/UMtJqPFrf6f6GRY0ZFnkCW7b6sYgUTjTtNfRj1RdmNic1NoJZql7y6BrqQinZvy7nsr1UFDNWoHn6ah3tg= open-ssh-ca@cloudflareaccess.org";
};
# Send regular backups and litestream for DBs to an S3-like bucket
backup.s3 = {
endpoint = "s3.us-west-002.backblazeb2.com";
bucket = "noahmasur-backup";

View File

@ -17,14 +17,25 @@ inputs.nixpkgs.lib.nixosSystem {
physical = true;
networking.hostName = "tempest";
# Not sure what's necessary but too afraid to remove anything
boot.initrd.availableKernelModules =
[ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
# Graphics and VMs
boot.initrd.kernelModules = [ "amdgpu" ];
boot.kernelModules = [ "kvm-amd" ];
services.xserver.videoDrivers = [ "amdgpu" ];
# Required binary blobs to boot on this machine
hardware.enableRedistributableFirmware = true;
# Prioritize performance over efficiency
powerManagement.cpuFreqGovernor = "performance";
# Allow firmware updates
hardware.cpu.amd.updateMicrocode = true;
# Helps reduce GPU fan noise under idle loads
hardware.fancontrol.enable = true;
hardware.fancontrol.config = ''
# Configuration file generated by pwmconfig, changes will be lost
@ -41,22 +52,29 @@ inputs.nixpkgs.lib.nixosSystem {
MAXPWM=hwmon0/pwm1=240
'';
# File systems must be declared in order to boot
# This is the root filesystem containing NixOS
fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
fsType = "ext4";
};
# This is the boot filesystem for Grub
fileSystems."/boot" = {
device = "/dev/disk/by-label/boot";
fsType = "vfat";
};
# Must be prepared ahead
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
passwordHash = inputs.nixpkgs.lib.fileContents ../../password.sha512;
# Secrets must be prepared ahead before deploying
passwordHash = inputs.nixpkgs.lib.fileContents ../../misc/password.sha512;
# Theming
# Turn on all features related to desktop and graphical applications
gui.enable = true;
# Set the system-wide theme, also used for non-graphical programs
theme = {
colors = (import ../../colorscheme/gruvbox-dark).dark;
dark = true;
@ -91,9 +109,11 @@ inputs.nixpkgs.lib.nixosSystem {
leagueoflegends.enable = true;
ryujinx.enable = true;
};
services.vmagent.enable = true;
services.vmagent.enable = true; # Enables Prometheus metrics
services.openssh.enable =
true; # Required for Cloudflare tunnel and identity file
services.openssh.enable = true; # Required for Cloudflare tunnel
# Allows private remote access over the internet
cloudflareTunnel = {
enable = true;
id = "ac133a82-31fb-480c-942a-cdbcd4c58173";
@ -103,6 +123,8 @@ inputs.nixpkgs.lib.nixosSystem {
};
# Allows requests to force machine to wake up
# This network interface might change, needs to be set specifically for each machine.
# Or set usePredictableInterfaceNames = false
networking.interfaces.enp5s0.wakeOnLan.enable = true;
}

21
misc/README.md Normal file
View File

@ -0,0 +1,21 @@
# Miscellaneous
These files contain important data sourced by the configuration, or simply
information to store for safekeeping later.
---
Creating hashed password for [password.sha512](./password.sha512):
```
mkpasswd -m sha-512
```
---
Getting key for [public-keys](./public-keys):
```
ssh-keyscan -t ed25519 <hostname>
```

23
misc/libratbag-profile Normal file
View File

@ -0,0 +1,23 @@
Profile 1: (active)
Name: n/a
Report Rate: 1000Hz
Resolutions:
0: 400dpi (active) (default)
1: 800dpi
2: 1600dpi
3: 2400dpi
4: 0dpi
Button: 0 is mapped to 'button 1'
Button: 1 is mapped to 'button 2'
Button: 2 is mapped to 'button 3'
Button: 3 is mapped to 'button 4'
Button: 4 is mapped to 'button 5'
Button: 5 is mapped to macro '↕F11'
Button: 6 is mapped to macro '↕VOLUMEDOWN'
Button: 7 is mapped to macro '↕VOLUMEUP'
Button: 8 is mapped to 'unknown'
Button: 9 is mapped to 'wheel-right'
Button: 10 is mapped to 'wheel-left'
LED: 0, depth: monochrome, mode: on, color: 000000
LED: 1, depth: monochrome, mode: on, color: 000000
LED: 2, depth: monochrome, mode: on, color: 000000

View File

@ -1,5 +1,6 @@
# Scan hosts: ssh-keyscan -t ed25519 <hostnames>
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s tempest
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s personal
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVknmPi7sG6ES0G0jcsvebzKGWWaMfJTYgvOue6EULI flame
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ9mwXlZnIALt9SnH3FOZvdgHLM5ZqwYUERXBbM7Rwh6 swan
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC3yHivgEXr2ecwe58h9bkhwTYivf3GwL8xenQKMeiUb tempest

View File

@ -5,4 +5,5 @@
| [common](./common/default.nix) | User programs and OS-agnostic configuration |
| [darwin](./darwin/default.nix) | macOS-specific configuration |
| [nixos](./nixos/default.nix) | NixOS-specific configuration |
| [wsl](./wsl/default.nix) | WSL-specific configuration |

View File

@ -11,23 +11,10 @@
config = lib.mkIf (config.gui.enable && config.kitty.enable) {
# Set the Rofi-Systemd terminal for viewing logs
# Using optionalAttrs because only available in NixOS
environment = { } // lib.attrsets.optionalAttrs
(builtins.hasAttr "sessionVariables" config.environment) {
sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.kitty}/bin/kitty";
};
terminal = "${pkgs.kitty}/bin/kitty";
home-manager.users.${config.user} = {
# Set the i3 terminal
xsession.windowManager.i3.config.terminal =
lib.mkIf pkgs.stdenv.isLinux "kitty";
# Set the Rofi terminal for running programs
programs.rofi.terminal =
lib.mkIf pkgs.stdenv.isLinux "${pkgs.kitty}/bin/kitty";
# Display images in the terminal
programs.fish.shellAliases = {
icat = "kitty +kitten icat";

View File

@ -31,21 +31,7 @@
pkgs.mpvScripts.autoload
# Delete current file after quitting
(pkgs.stdenv.mkDerivation rec {
pname = "mpv-delete-file";
version = "0.1"; # made-up
src = pkgs.fetchFromGitHub {
owner = "zenyd";
repo = "mpv-scripts";
rev = "19ea069abcb794d1bf8fac2f59b50d71ab992130";
sha256 = "sha256-OBCuzCtgfSwj0i/rBNranuu4LRc47jObwQIJgQQoerg=";
} + "/delete_file.lua";
dontBuild = true;
dontUnpack = true;
installPhase =
"install -Dm644 ${src} $out/share/mpv/scripts/delete_file.lua";
passthru.scriptName = "delete_file.lua";
})
pkgs.mpvScripts.mpv-delete-file
];
};

View File

@ -104,7 +104,7 @@
# Used to login and send and receive emails
passwordCommand =
"${pkgs.age}/bin/age --decrypt --identity ${config.identityFile} ${
"${pkgs.age}/bin/age --decrypt --identity ~/.ssh/id_ed25519 ${
pkgs.writeText "mailpass.age"
(builtins.readFile ../../../private/mailpass.age)
}";

View File

@ -52,7 +52,9 @@
vim.o.backup = true; # Easier to recover and more secure
vim.bo.swapfile = false; # Instead of swaps, create backups
vim.bo.undofile = true; # Keeps undos after quit
vim.o.backupdir = dsl.rawLua ''vim.fn.stdpath("cache") .. "/backup"'';
vim.o.backupdir =
dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/backup//")'';
vim.o.undodir = dsl.rawLua ''vim.fn.expand("~/.local/state/nvim/undo//")'';
# Required for nvim-cmp completion
vim.opt.completeopt = [ "menu" "menuone" "noselect" ];

View File

@ -23,6 +23,7 @@
pkgs.vimPlugins.nginx-vim
pkgs.vimPlugins.vim-helm
pkgs.baleia-nvim # Clean ANSI from kitty scrollback
# pkgs.hmts-nvim # Tree-sitter injections for home-manager
(pkgs.vimUtils.buildVimPluginFrom2Nix {
pname = "nmasur";
version = "0.1";

View File

@ -20,6 +20,7 @@ in {
# Use Neovim as the editor for git commit messages
programs.git.extraConfig.core.editor = "nvim";
programs.jujutsu.settings.ui.editor = "nvim";
# Set Neovim as the default app for text editing and manual pages
home.sessionVariables = {

View File

@ -0,0 +1,26 @@
#!/bin/sh
# Stop all containers
if [ "$(docker ps -a -q)" ]; then
echo "Stopping docker containers..."
docker stop "$(docker ps -a -q)"
else
echo "No running docker containers."
fi
# Remove all stopped containers
if [ "$(docker ps -a -q)" ]; then
echo "Removing docker containers..."
docker rm "$(docker ps -a -q)"
else
echo "No stopped docker containers."
fi
# Remove all untagged images
if docker images | grep -q "^<none>"; then
docker rmi "$(docker images | grep "^<none>" | awk '{print $3}')"
else
echo "No untagged docker images."
fi
echo "Cleaned up docker."

View File

@ -7,6 +7,7 @@
./fzf.nix
./git.nix
./github.nix
./jujutsu.nix
./nixpkgs.nix
./starship.nix
./utilities.nix

View File

@ -1,8 +1,7 @@
{ config, pkgs, lib, ... }: {
users.users.${config.user}.shell = pkgs.fish;
programs.fish.enable =
true; # Needed for LightDM to remember username (TODO: fix)
programs.fish.enable = true; # Needed for LightDM to remember username
home-manager.users.${config.user} = {
@ -12,8 +11,14 @@
programs.fish = {
enable = true;
shellAliases = {
# Version of bash which works much better on the terminal
bash = "${pkgs.bashInteractive}/bin/bash";
ls = "exa";
# Use exa instead of ls for fancier output
ls = "exa --group";
# Move files to XDG trash on the commandline
trash = lib.mkIf pkgs.stdenv.isLinux "${pkgs.trash-cli}/bin/trash-put";
};
functions = {

View File

@ -0,0 +1,21 @@
{ config, ... }: {
config = {
home-manager.users.${config.user}.programs.jujutsu = {
enable = true;
enableFishIntegration = true;
# https://github.com/martinvonz/jj/blob/main/docs/config.md
settings = {
user = {
name = config.home-manager.users.${config.user}.programs.git.userName;
email =
config.home-manager.users.${config.user}.programs.git.userEmail;
};
};
};
};
}

View File

@ -12,14 +12,6 @@
options = {
launcherCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use for launching";
};
systemdSearch = lib.mkOption {
type = lib.types.str;
description = "Command to use for interacting with systemd";
};
altTabCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use for choosing windows";
@ -36,14 +28,30 @@
type = lib.types.str;
description = "Command to use for quick calculations";
};
toggleBarCommand = lib.mkOption {
launcherCommand = lib.mkOption {
type = lib.types.str;
description = "Command to hide and show the status bar.";
description = "Command to use for launching";
};
lockScreenCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use to lock the screen";
};
powerCommand = lib.mkOption {
type = lib.types.str;
description = "Command to use for power options menu";
};
systemdSearch = lib.mkOption {
type = lib.types.str;
description = "Command to use for interacting with systemd";
};
terminal = lib.mkOption {
type = lib.types.str;
description = "Package to use for graphical terminal";
};
toggleBarCommand = lib.mkOption {
type = lib.types.str;
description = "Command to hide and show the status bar.";
};
wallpaper = lib.mkOption {
type = lib.types.path;
description = "Wallpaper background image file";

View File

@ -2,8 +2,6 @@
let
lockCmd =
"${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span";
lockUpdate =
"${pkgs.betterlockscreen}/bin/betterlockscreen --update ${config.wallpaper} --display 1 --span";
@ -29,12 +27,6 @@ in {
ws2 = "2:II";
ws3 = "3:III";
ws4 = "4:IV";
ws5 = "5:V";
ws6 = "6:VI";
ws7 = "7:VII";
ws8 = "8:VIII";
ws9 = "9:IX";
ws10 = "10:X";
in {
modifier = modifier;
assigns = {
@ -92,118 +84,6 @@ in {
followMouse = false;
};
keybindings = {
# Adjust screen brightness
"Shift+F12" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 + 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 + 30";
"Shift+F11" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 - 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 - 30";
"XF86MonBrightnessUp" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 + 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 + 30";
"XF86MonBrightnessDown" =
"exec ${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 - 30 && sleep 1; exec ${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 - 30";
# Media player controls
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl stop";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
# Launchers
"${modifier}+Return" =
"exec --no-startup-id kitty; workspace ${ws2}; layout tabbed";
"${modifier}+space" =
"exec --no-startup-id ${config.launcherCommand}";
"${modifier}+Shift+s" =
"exec --no-startup-id ${config.systemdSearch}";
"${modifier}+Shift+a" =
"exec --no-startup-id ${config.audioSwitchCommand}";
"Mod1+Tab" = "exec --no-startup-id ${config.altTabCommand}";
"${modifier}+Shift+period" =
"exec --no-startup-id ${config.powerCommand}";
"${modifier}+Shift+m" =
"exec --no-startup-id ${config.brightnessCommand}";
"${modifier}+c" =
"exec --no-startup-id ${config.calculatorCommand}";
"${modifier}+Shift+c" = "reload";
"${modifier}+Shift+r" = "restart";
"${modifier}+Shift+q" = ''
exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"'';
"${modifier}+Shift+x" = "exec ${lockCmd}";
"${modifier}+Mod1+h" =
"exec --no-startup-id kitty sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
"${modifier}+Mod1+r" =
"exec --no-startup-id kitty sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
# Window options
"${modifier}+q" = "kill";
"${modifier}+b" = "exec ${config.toggleBarCommand}";
"${modifier}+f" = "fullscreen toggle";
"${modifier}+h" = "focus left";
"${modifier}+j" = "focus down";
"${modifier}+k" = "focus up";
"${modifier}+l" = "focus right";
"${modifier}+Left" = "focus left";
"${modifier}+Down" = "focus down";
"${modifier}+Up" = "focus up";
"${modifier}+Right" = "focus right";
"${modifier}+Shift+h" = "move left";
"${modifier}+Shift+j" = "move down";
"${modifier}+Shift+k" = "move up";
"${modifier}+Shift+l" = "move right";
"${modifier}+Shift+Left" = "move left";
"${modifier}+Shift+Down" = "move down";
"${modifier}+Shift+Up" = "move up";
"${modifier}+Shift+Right" = "move right";
# Tiling
"${modifier}+i" = "split h";
"${modifier}+v" = "split v";
"${modifier}+s" = "layout stacking";
"${modifier}+t" = "layout tabbed";
"${modifier}+e" = "layout toggle split";
"${modifier}+Shift+space" = "floating toggle";
"${modifier}+Control+space" = "focus mode_toggle";
"${modifier}+a" = "focus parent";
# Workspaces
"${modifier}+1" = "workspace ${ws1}";
"${modifier}+2" = "workspace ${ws2}";
"${modifier}+3" = "workspace ${ws3}";
"${modifier}+4" = "workspace ${ws4}";
"${modifier}+5" = "workspace ${ws5}";
"${modifier}+6" = "workspace ${ws6}";
"${modifier}+7" = "workspace ${ws7}";
"${modifier}+8" = "workspace ${ws8}";
"${modifier}+9" = "workspace ${ws9}";
"${modifier}+0" = "workspace ${ws10}";
# Move windows
"${modifier}+Shift+1" =
"move container to workspace ${ws1}; workspace ${ws1}";
"${modifier}+Shift+2" =
"move container to workspace ${ws2}; workspace ${ws2}";
"${modifier}+Shift+3" =
"move container to workspace ${ws3}; workspace ${ws3}";
"${modifier}+Shift+4" =
"move container to workspace ${ws4}; workspace ${ws4}";
"${modifier}+Shift+5" =
"move container to workspace ${ws5}; workspace ${ws5}";
"${modifier}+Shift+6" =
"move container to workspace ${ws6}; workspace ${ws6}";
"${modifier}+Shift+7" =
"move container to workspace ${ws7}; workspace ${ws7}";
"${modifier}+Shift+8" =
"move container to workspace ${ws8}; workspace ${ws8}";
"${modifier}+Shift+9" =
"move container to workspace ${ws9}; workspace ${ws9}";
"${modifier}+Shift+0" =
"move container to workspace ${ws10}; workspace ${ws10}";
# Move screens
"${modifier}+Control+l" = "move workspace to output right";
"${modifier}+Control+h" = "move workspace to output left";
# Resizing
"${modifier}+r" = ''mode "resize"'';
"${modifier}+Control+Shift+h" =
@ -232,6 +112,7 @@ in {
notification = false;
}
];
terminal = config.terminal;
window = {
border = 0;
hideEdgeBorders = "smart";
@ -239,22 +120,13 @@ in {
};
workspaceAutoBackAndForth = false;
workspaceOutputAssign = [ ];
# gaps = {
# bottom = 8;
# top = 8;
# left = 8;
# right = 8;
# horizontal = 15;
# vertical = 15;
# inner = 15;
# outer = 0;
# smartBorders = "off";
# smartGaps = false;
# };
};
extraConfig = "";
};
lockScreenCommand =
"${pkgs.betterlockscreen}/bin/betterlockscreen --lock --display 1 --blur 0.5 --span";
programs.fish.functions = {
update-lock-screen = lib.mkIf config.services.xserver.enable {
description = "Update lockscreen with wallpaper";
@ -278,14 +150,14 @@ in {
# Ref: https://github.com/betterlockscreen/betterlockscreen/blob/next/system/betterlockscreen%40.service
systemd.services.lock = {
enable = config.services.xserver.enable;
description = "Lock the screen on resume from suspend";
description = "Lock the screen before suspend";
before = [ "sleep.target" "suspend.target" ];
serviceConfig = {
User = config.user;
Type = "simple";
Environment = "DISPLAY=:0";
TimeoutSec = "infinity";
ExecStart = lockCmd;
ExecStart = config.lockScreenCommand;
ExecStartPost = "${pkgs.coreutils-full}/bin/sleep 1";
};
wantedBy = [ "sleep.target" "suspend.target" ];

View File

@ -0,0 +1,100 @@
{ config, pkgs, lib, ... }:
let
keybindings =
config.home-manager.users.${config.user}.programs.sxhkd.keybindings;
workspaceBindings = let
workspaces = {
"1" = "1:I";
"2" = "2:II";
"3" = "3:III";
"4" = "4:IV";
"5" = "5:V";
"6" = "6:VI";
"7" = "7:VII";
"8" = "8:VIII";
"9" = "9:IX";
"0" = "10:X";
};
# Create an attrset of keybinds to actions for every workspace by number
bindAll = keybindFunction: actionFunction:
(lib.genAttrs (map keybindFunction (builtins.attrNames workspaces))
actionFunction);
# Look up the name of the workspace based on its number
lookup = num: builtins.getAttr num workspaces;
in (bindAll (num: "super + ${num}")
(num: ''${pkgs.i3}/bin/i3-msg "workspace ${lookup num}"''))
// (bindAll (num: "super + shift + ${num}") (num:
''
${pkgs.i3}/bin/i3-msg "move container to workspace ${
lookup num
}; workspace ${lookup num}"''));
in {
home-manager.users.${config.user}.programs.sxhkd = {
enable = true;
keybindings = {
# Adjust screen brightness (TODO: replace with pkgs.light?)
"shift + {F11,F12}" = ''
${pkgs.ddcutil}/bin/ddcutil --display 1 setvcp 10 {- 30,+ 30} && sleep 1; \\
${pkgs.ddcutil}/bin/ddcutil --display 2 setvcp 10 {- 30,+ 30}
'';
"XF86MonBrightness{Down,Up}" = keybindings."shift + {F11,F12}";
# Media controls
"XF86Audio{Play,Stop,Next,Prev}" =
"${pkgs.playerctl}/bin/playerctl {play-pause,stop,next,previous}";
# Window management
"super + q" = ''${pkgs.i3}/bin/i3-msg "kill"'';
"super + b" = config.toggleBarCommand;
"super + f" = ''${pkgs.i3}/bin/i3-msg "fullscreen toggle"'';
"super + {h,j,k,l}" =
''${pkgs.i3}/bin/i3-msg "focus {left,down,up,right}"'';
"super + {Left,Down,Up,Right}" = keybindings."super + {h,j,k,l}";
"super + shift + {h,j,k,l}" =
''${pkgs.i3}/bin/i3-msg "move {left,down,up,right}"'';
"super + shift + {Left,Down,Up,Right}" =
keybindings."super + shift + {h,j,k,l}";
# Screen management
"super + control + l" =
''${pkgs.i3}/bin/i3-msg "move workspace to output right"'';
"super + control + h" =
''${pkgs.i3}/bin/i3-msg "move workspace to output left"'';
# Window layouts and tiling
"super + {i,v}" = ''${pkgs.i3}/bin/i3-msg "split {h,v}"'';
"super + {s,t,e}" =
''${pkgs.i3}/bin/i3-msg "layout {stacking,tabbed,toggle split}"'';
"super + shift + space" = ''${pkgs.i3}/bin/i3-msg "floating toggle"'';
"super + control + space" = ''${pkgs.i3}/bin/i3-msg "focus mode_toggle"'';
"super + a" = ''${pkgs.i3}/bin/i3-msg "focus parent"'';
# Launchers
"super + Return" = config.terminal;
"super + space" = config.launcherCommand;
"super + shift + s" = config.systemdSearch;
"super + shift + a" = config.audioSwitchCommand;
"alt + Tab" = config.altTabCommand;
"super + shift + period" = config.powerCommand;
"super + shift + m" = config.brightnessCommand;
"super + c" = config.calculatorCommand;
"super + shift + {c,r}" = ''${pkgs.i3}/bin/i3-msg "{reload,restart}"'';
"super + shift + x" = config.lockScreenCommand;
"super + alt + h" =
"${config.terminal} sh -c '${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
"super + alt + r" =
"${config.terminal} sh -c 'doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName} || read'";
} // workspaceBindings;
};
}

View File

@ -1,6 +1,6 @@
{ config, pkgs, lib, ... }: {
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
config = lib.mkIf config.services.xserver.enable {
home-manager.users.${config.user} = {
services.picom = {

View File

@ -1,6 +1,6 @@
{ config, pkgs, lib, ... }: {
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
config = lib.mkIf config.services.xserver.enable {
toggleBarCommand = "polybar-msg cmd toggle";

View File

@ -8,11 +8,10 @@ in {
imports = [ ./rofi/power.nix ./rofi/brightness.nix ];
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
config = lib.mkIf config.services.xserver.enable {
# Set the Rofi-Systemd terminal for viewing logs
environment.sessionVariables.ROFI_SYSTEMD_TERM =
lib.mkIf config.kitty.enable "${pkgs.kitty}/bin/kitty";
environment.sessionVariables.ROFI_SYSTEMD_TERM = config.terminal;
home-manager.users.${config.user} = {
@ -24,6 +23,13 @@ in {
programs.rofi = {
enable = true;
cycle = true;
extraConfig = {
show-icons = true;
kb-cancel = "Escape,Super+space";
modi = "window,run,ssh,emoji,calc,systemd";
sort = true;
# levenshtein-sort = true;
};
location = "center";
pass = { };
plugins = [ pkgs.rofi-calc pkgs.rofi-emoji pkgs.rofi-systemd ];
@ -143,15 +149,9 @@ in {
};
};
terminal = config.terminal;
xoffset = 0;
yoffset = -20;
extraConfig = {
show-icons = true;
kb-cancel = "Escape,Super+space";
modi = "window,run,ssh,emoji,calc,systemd";
sort = true;
# levenshtein-sort = true;
};
};
home.file.".local/share/rofi/themes" = {

0
modules/nixos/graphical/rofi/brightness.nix Executable file → Normal file
View File

0
modules/nixos/graphical/rofi/power.nix Executable file → Normal file
View File

View File

@ -4,14 +4,13 @@
*/
@import "common.rasi"
* {
font: @text-font;
font: @prompt-text-font;
}
#window {
height: @prompt-window-height;
width: @prompt-window-width;
children: [ inputbar, horibox ];
border: @prompt-window-border;
border-color: @accent;
}
#inputbar {
enabled: false;
@ -19,8 +18,6 @@
#prompt {
padding: @prompt-prompt-padding;
margin: @prompt-prompt-margin;
background-color: @accent;
text-color: @background-light;
}
#listview {
padding: @prompt-listview-padding;
@ -31,19 +28,3 @@
font: @prompt-text-font;
padding: @prompt-element-padding;
}
element.alternate.active,
element.normal.active,
element.alternate.urgent,
element.normal.urgent {
background-color: @background-light;
text-color: @foreground;
}
element.selected.urgent {
background-color: @off;
text-color: @background;
}
element.selected.active {
background-color: @on;
text-color: @background;
}

View File

@ -0,0 +1,25 @@
{ config, lib, ... }: {
config = lib.mkIf config.gui.enable {
programs.sway = {
enable = true;
package = null; # Use home-manager Sway instead
};
};
home-manager.users.${config.user} = {
wayland.windowManager.sway = {
enable = true;
config =
config.home-manager.users.${config.user}.xsession.windowManager.i3.config;
};
};
# TODO: swaybg
# TODO: swaylock
}

View File

@ -40,6 +40,7 @@
greeters.gtk.theme = gtkTheme;
# Show default user
# Also make sure /var/lib/AccountsService/users/<user> has SystemAccount=false
extraSeatDefaults = ''
greeter-hide-users = false
'';

View File

@ -44,7 +44,7 @@
listen = [ ":443" ];
routes = config.caddy.routes;
errors.routes = config.caddy.blocks;
# logs = { }; # Uncomment to collect access logs
logs = { }; # Uncomment to collect access logs
};
apps.http.servers.metrics = { }; # Enables Prometheus metrics
apps.tls.automation.policies = config.caddy.tlsPolicies;
@ -54,6 +54,7 @@
output = "file";
filename = "${config.services.caddy.logDir}/caddy.log";
roll = true;
roll_size_mb = 1;
};
level = "INFO";
};

View File

@ -30,7 +30,11 @@ in {
match = [{ host = [ config.hostnames.books ]; }];
handle = [{
handler = "reverse_proxy";
upstreams = [{ dial = "localhost:8083"; }];
upstreams = [{
dial = "localhost:${
builtins.toString config.services.calibre-web.listen.port
}";
}];
headers.request.add."X-Script-Name" = [ "/calibre-web" ];
}];
}];

View File

@ -44,10 +44,7 @@ in {
caddy.cidrAllowlist = cloudflareIpRanges;
# Tell Caddy to use Cloudflare DNS for ACME challenge validation
services.caddy.package = (pkgs.callPackage ../../../overlays/caddy.nix {
plugins = [ "github.com/caddy-dns/cloudflare" ];
# vendorSha256 = "sha256-K9HPZnr+hMcK5aEd1H4gEg6PXAaNrNWFvaHYm5m62JY=";
});
services.caddy.package = pkgs.caddy-cloudflare; # Patched overlay
caddy.tlsPolicies = [{
issuers = [{
module = "acme";

File diff suppressed because it is too large Load Diff

View File

@ -4,15 +4,27 @@
services.nextcloud = {
package = pkgs.nextcloud27; # Required to specify
configureRedis = true;
datadir = "/data/nextcloud";
database.createLocally = true;
https = true;
hostName = "localhost";
maxUploadSize = "50G";
config = {
adminpassFile = config.secrets.nextcloud.dest;
dbtype = "mysql";
extraTrustedDomains = [ config.hostnames.content ];
trustedProxies = [ "127.0.0.1" ];
};
extraOptions = { default_phone_region = "US"; };
extraAppsEnable = true;
extraApps = with config.services.nextcloud.package.packages.apps; {
inherit calendar contacts;
news = pkgs.nextcloudApps.news;
external = pkgs.nextcloudApps.external;
cookbook = pkgs.nextcloudApps.cookbook;
};
phpOptions = { "opcache.interned_strings_buffer" = "16"; };
};
# Don't let Nginx use main ports (using Caddy instead)
@ -147,35 +159,10 @@
# Grant user access to Nextcloud directories
users.users.${config.user}.extraGroups = [ "nextcloud" ];
## Backup config
# Open to groups, allowing for backups
systemd.services.phpfpm-nextcloud.serviceConfig.StateDirectoryMode =
lib.mkForce "0770";
# Allow litestream and nextcloud to share a sqlite database
users.users.litestream.extraGroups = [ "nextcloud" ];
users.users.nextcloud.extraGroups = [ "litestream" ];
# Backup sqlite database with litestream
services.litestream = {
settings = {
dbs = [{
path = "${config.services.nextcloud.datadir}/data/nextcloud.db";
replicas = [{
url =
"s3://${config.backup.s3.bucket}.${config.backup.s3.endpoint}/nextcloud";
}];
}];
};
};
# Don't start litestream unless nextcloud is up
systemd.services.litestream = {
after = [ "phpfpm-nextcloud.service" ];
requires = [ "phpfpm-nextcloud.service" ];
};
# Log metrics to prometheus
networking.hosts."127.0.0.1" = [ config.hostnames.content ];
services.prometheus.exporters.nextcloud = {

View File

@ -39,7 +39,11 @@ in {
match = [{ host = [ config.hostnames.secrets ]; }];
handle = [{
handler = "reverse_proxy";
upstreams = [{ dial = "localhost:8222"; }];
upstreams = [{
dial = "localhost:${
builtins.toString config.services.vaultwarden.config.ROCKET_PORT
}";
}];
headers.request.add."X-Real-IP" = [ "{http.request.remote.host}" ];
}];
}];

View File

@ -38,7 +38,7 @@
};
# Create private key file for wireguard
secrets.wireguard = {
secrets.wireguard = lib.mkIf config.wireguard.enable {
source = ../../../private/wireguard.age;
dest = "${config.secretsDirectory}/wireguard";
};

7
overlays/README.md Normal file
View File

@ -0,0 +1,7 @@
# Overlays
These are pinned commits, patches, or new packages for programs in Nixpkgs used
by this flake configuration.
Some of them introduce new functionality, while others could be patching
temporary issues.

View File

@ -1,9 +1,14 @@
# Adds the Cloudflare DNS validation module
{ lib, buildGo118Module, fetchFromGitHub, plugins ? [ ] }:
inputs: _final: prev:
let
goImports = lib.flip lib.concatMapStrings plugins (pkg: " _ \"${pkg}\"\n");
goGets = lib.flip lib.concatMapStrings plugins (pkg: "go get ${pkg}\n ");
plugins = [ "github.com/caddy-dns/cloudflare" ];
goImports =
prev.lib.flip prev.lib.concatMapStrings plugins (pkg: " _ \"${pkg}\"\n");
goGets = prev.lib.flip prev.lib.concatMapStrings plugins
(pkg: "go get ${pkg}\n ");
main = ''
package main
import (
@ -15,44 +20,43 @@ let
caddycmd.Main()
}
'';
in buildGo118Module rec {
pname = "caddy";
version = "2.6.4";
runVend = true;
subPackages = [ "cmd/caddy" ];
in {
caddy-cloudflare = prev.buildGo118Module {
pname = "caddy-cloudflare";
version = prev.caddy.version;
runVend = true;
src = fetchFromGitHub {
owner = "caddyserver";
repo = "caddy";
rev = "v${version}";
sha256 = "sha256:3a3+nFHmGONvL/TyQRqgJtrSDIn0zdGy9YwhZP17mU0=";
};
subPackages = [ "cmd/caddy" ];
vendorSha256 = "sha256:CrHqJcJ0knX+txQ5qvzW4JrU8vfi3FO3M/xtislIC1M=";
src = prev.caddy.src;
overrideModAttrs = (_: {
preBuild = ''
vendorSha256 = "sha256:CrHqJcJ0knX+txQ5qvzW4JrU8vfi3FO3M/xtislIC1M=";
overrideModAttrs = (_: {
preBuild = ''
echo '${main}' > cmd/caddy/main.go
${goGets}
'';
postInstall = "cp go.sum go.mod $out/ && ls $out/";
});
postPatch = ''
echo '${main}' > cmd/caddy/main.go
${goGets}
cat cmd/caddy/main.go
'';
postInstall = "cp go.sum go.mod $out/ && ls $out/";
});
postPatch = ''
echo '${main}' > cmd/caddy/main.go
cat cmd/caddy/main.go
'';
postConfigure = ''
cp vendor/go.sum ./
cp vendor/go.mod ./
'';
postConfigure = ''
cp vendor/go.sum ./
cp vendor/go.mod ./
'';
meta = with lib; {
homepage = "https://caddyserver.com";
description = "Fast, cross-platform HTTP/2 web server with automatic HTTPS";
license = licenses.asl20;
maintainers = with maintainers; [ Br1ght0ne techknowlogick ];
meta = with prev.lib; {
homepage = "https://caddyserver.com";
description =
"Fast, cross-platform HTTP/2 web server with automatic HTTPS";
license = licenses.asl20;
maintainers = with maintainers; [ Br1ght0ne techknowlogick ];
};
};
}

17
overlays/mpv-scripts.nix Normal file
View File

@ -0,0 +1,17 @@
inputs: _final: prev: {
mpvScripts = prev.mpvScripts // {
# Delete current file after quitting
mpv-delete-file = prev.stdenv.mkDerivation rec {
pname = "mpv-delete-file";
version = "0.1"; # made-up
src = inputs.zenyd-mpv-scripts + "/delete_file.lua";
dontBuild = true;
dontUnpack = true;
installPhase =
"install -Dm644 ${src} $out/share/mpv/scripts/delete_file.lua";
passthru.scriptName = "delete_file.lua";
};
};
}

View File

@ -19,24 +19,23 @@ in {
nil = inputs.nil.packages.${prev.system}.nil;
vscode-terraform-snippets = inputs.vscode-terraform-snippets;
nvim-lspconfig =
(withSrc prev.vimPlugins.nvim-lspconfig inputs.nvim-lspconfig);
cmp-nvim-lsp = (withSrc prev.vimPlugins.cmp-nvim-lsp inputs.cmp-nvim-lsp);
null-ls-nvim = (withSrc prev.vimPlugins.null-ls-nvim inputs.null-ls-nvim);
comment-nvim = (withSrc prev.vimPlugins.comment-nvim inputs.comment-nvim);
nvim-lspconfig = withSrc prev.vimPlugins.nvim-lspconfig inputs.nvim-lspconfig;
cmp-nvim-lsp = withSrc prev.vimPlugins.cmp-nvim-lsp inputs.cmp-nvim-lsp;
null-ls-nvim = withSrc prev.vimPlugins.null-ls-nvim inputs.null-ls-nvim;
comment-nvim = withSrc prev.vimPlugins.comment-nvim inputs.comment-nvim;
nvim-treesitter =
(withSrc prev.vimPlugins.nvim-treesitter inputs.nvim-treesitter);
telescope-nvim =
(withSrc prev.vimPlugins.telescope-nvim inputs.telescope-nvim);
telescope-project-nvim = (withSrc prev.vimPlugins.telescope-project-nvim
inputs.telescope-project-nvim);
withSrc prev.vimPlugins.nvim-treesitter inputs.nvim-treesitter;
telescope-nvim = withSrc prev.vimPlugins.telescope-nvim inputs.telescope-nvim;
telescope-project-nvim = withSrc prev.vimPlugins.telescope-project-nvim
inputs.telescope-project-nvim;
toggleterm-nvim =
(withSrc prev.vimPlugins.toggleterm-nvim inputs.toggleterm-nvim);
withSrc prev.vimPlugins.toggleterm-nvim inputs.toggleterm-nvim;
bufferline-nvim =
(withSrc prev.vimPlugins.bufferline-nvim inputs.bufferline-nvim);
nvim-tree-lua = (withSrc prev.vimPlugins.nvim-tree-lua inputs.nvim-tree-lua);
withSrc prev.vimPlugins.bufferline-nvim inputs.bufferline-nvim;
nvim-tree-lua = withSrc prev.vimPlugins.nvim-tree-lua inputs.nvim-tree-lua;
# Packaging plugins entirely with Nix
baleia-nvim = plugin "baleia-nvim" inputs.baleia-nvim-src;
hmts-nvim = plugin "hmts-nvim" inputs.hmts-nvim-src;
}

View File

@ -0,0 +1,18 @@
inputs: _final: prev: {
nextcloudApps = {
news = prev.fetchNextcloudApp {
url = inputs.nextcloud-news.outPath;
sha256 = inputs.nextcloud-news.narHash;
};
external = prev.fetchNextcloudApp {
url = inputs.nextcloud-external.outPath;
sha256 = inputs.nextcloud-external.narHash;
};
cookbook = prev.fetchNextcloudApp {
url = inputs.nextcloud-cookbook.outPath;
sha256 = inputs.nextcloud-cookbook.narHash;
};
};
}

View File

@ -4,57 +4,29 @@ inputs: _final: prev: {
# Fix: bash highlighting doesn't work as of this commit:
# https://github.com/NixOS/nixpkgs/commit/49cce41b7c5f6b88570a482355d9655ca19c1029
tree-sitter-bash = prev.tree-sitter-grammars.tree-sitter-bash.overrideAttrs
(old: {
src = prev.fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-bash";
rev = "493646764e7ad61ce63ce3b8c59ebeb37f71b841";
sha256 = "sha256-gl5F3IeZa2VqyH/qFj8ey2pRbGq4X8DL5wiyvRrH56U=";
};
});
(old: { src = inputs.tree-sitter-bash; });
# Fix: invalid node in position. Broken as of this commit (replaced with newer):
# https://github.com/NixOS/nixpkgs/commit/8ec3627796ecc899e6f47f5bf3c3220856ead9c5
tree-sitter-python =
prev.tree-sitter-grammars.tree-sitter-python.overrideAttrs (old: {
src = prev.fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-python";
rev = "5af00f64af6bbf822f208243cce5cf75396fb6f5";
sha256 = "sha256-2btd/NRE6NuGNlx4cq535OrwtWXihiP3VMCJjPCiDOk=";
};
});
prev.tree-sitter-grammars.tree-sitter-python.overrideAttrs
(old: { src = inputs.tree-sitter-python; });
# Add grammars not in nixpks
tree-sitter-ini = prev.tree-sitter.buildGrammar {
language = "ini";
version = "1.0.0";
src = prev.fetchFromGitHub {
owner = "justinmk";
repo = "tree-sitter-ini";
rev = "1a0ce072ebf3afac7d5603d9a95bb7c9a6709b44";
sha256 = "sha256-pPtKokpTgjoNzPW4dRkOnyzBBJFeJj3+CW3LbHSKsmU=";
};
src = inputs.tree-sitter-ini;
};
tree-sitter-puppet = prev.tree-sitter.buildGrammar {
language = "puppet";
version = "1.0.0";
src = prev.fetchFromGitHub {
owner = "amaanq";
repo = "tree-sitter-puppet";
rev = "v1.0.0";
sha256 = "sha256-vk5VJZ9zW2bBuc+DM+fwFyhM1htZGeLlmkjMAH66jBA=";
};
src = inputs.tree-sitter-puppet;
};
tree-sitter-rasi = prev.tree-sitter.buildGrammar {
language = "rasi";
version = "0.1.1";
src = prev.fetchFromGitHub {
owner = "Fymyte";
repo = "tree-sitter-rasi";
rev = "371dac6bcce0df5566c1cfebde69d90ecbeefd2d";
sha256 = "sha256-2nYZoLcrxxxiOJEySwHUm93lzMg8mU+V7LIP63ntFdA=";
};
src = inputs.tree-sitter-rasi;
};
};

View File

@ -1,13 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBkOVNs
NklGeTFxTTQzQ2t5WVUvVzREVnk3WjB0ZnUwdGo5Wk5Zc2RVeVJJCnBFbHcvUzdi
SG5xeTg2dU9oRUtiYXk3cERJOC9zbitrZ1hxZ0RJWDVYNmcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIElNNkFMYkRoYXpPV1RtWEhrdUJCbXczd05tTG5QNi8wVktYQmZn
eTlWbTgKUVVrb21mTTNzZ1d6cE0yU2l4SVhqbkNyUEpLSHJyUEMyS1pLNGloTlpK
cwotPiBzc2gtZWQyNTUxOSBuanZYNUEgRU5LM2FKNEZ3Y1dDOW02VFU4bnNuZHpE
QzBLMlBhVnY3aGIrZDNhOUNWcwpSMHNsYTRlNFc5V0NsQ1h2VGFqUHNBVkxTVXdz
dGx6bWFwR1FFU2JNdmlBCi0tLSB6b3dpRmFURm0veFRFRitpbmZoOWJFcU8rbHJk
OXVIbGpUSWNFdWZmczVNCrodWjz8yVOdHHcVH9s2gOJfDrZFCP7L14RdGs9UW/Iw
JaJr5YblUiqTfKJiCN8dnCve3oCUlIY6K+yrBh5GaNbiwOgCzzZO5BGXEqoUSnux
ltmV1UI4
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBhNzEr
aFRkQ3luWWhBbmdTTEtNOGc0c3ZPcTlRbktxd2xQZHFyMDF1c1ZVCkMwWDF5UlJH
RTBhMXI0ZEhkQm5takh0QUpiZm5rbTk3M3REdUhQV0lOdmMKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHdGOVptZzNIRlp1NUlFY1k2b1FtN3JRczMrZ054ZlhUbVlvRVVS
NEZCaTQKUmMwWFBBVDdBMlBpekVCSC9EMERHdXlKNGpubXRmY0FxalRxbTNnREky
ZwotPiBzc2gtZWQyNTUxOSBuanZYNUEgeGhzMDRONFJjMEJZWUlDeHp6SHZERXJS
VjNLb25adVJ2V0MxMm9DUE5Gawo2RlhSNDY3K2oyQ2VGZ3p1MHRreU0ydmZjRkZQ
bHZsbkxXdzNsN1A2alBBCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBqL2FWZis5N2l6
T0lYUVRBcDBWQ0sxRFd5V3JydzVTVUZZaDZyL1ZGaUJvClRPazdXOWM5MUhrLys4
OWp2SVg5S0pnVE51MzRwMU1hRThKVFJZSHJzY1kKLS0tIGl1UjBtUzhVZTArZkVt
RVhMMlJNQVlBS0Z5bTByQ1hpSGQvZVprL29oS0UKZGsWBbEUiDIJhoBOEaLF7cnW
FMcg1pxgmlioqsRbKdcYlZWEKDYUa0ZctJEYo0m+eGxilTV/qctyiEIYsoKU1t0Y
+kCTYQk+RbtKfQ7xEStmJ2cdZDE=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,13 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyByWGJS
SmJlSVhZcUx5Y3JhVXYxUVhUbmp2QjNXeUxYL1EwNThJelRoTVNvCjFsU0gyaWNJ
SEJpNVpYWm1TL24yeHNLaWNIdU9FdWw2d3p6UVVMSEYwT28KLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEV4NU1sOENFK1NvUWlZL1NmUCtUM2RRQmd1c2pnb3p6V3Bsc3pC
UVdYV3cKYmFkR0EwNVpRbzJBb2Z4RmpXSGVyK3BkLzd6TTMvQWRRK3BtRXZDUjVZ
UQotPiBzc2gtZWQyNTUxOSBuanZYNUEgMG9rU0lzTU1iV1grOTNzZS85cldQZGE5
Ym9nVkRvNC9OMUFBbStNT1BBOApucnl1Z0w1Y1RRU3grS0Z0TjNNRXcwVnVqeDFF
VGc3Mm93UFc0YXoweVBBCi0tLSBvTnpCc3hBVU81dkpBRzV2L3NWTlZaV2QxUVNZ
KzJwcUI2QUl2NEY0R1p3CmDvQwsKrtmTJliCxHv+LSoIV8jYpQJ7I2LJSH9uP89N
+7wbAwGjv/Uxk7gnMn5EqQuFKZeOl8LLhKEprmVqVZqlkgbpaaaWud/4xNKu9v5h
lWuY1sYd
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBRckNo
MkttVHF3WWhKMGtCY1ZoL251SlhEb0YxUEZSSDBLVHhQK3o1QW1rCkp5WHFTb0xE
amRrM05XRGxzMkRPUWx3Z1BVMFRsRGxvemRLckZEY0E0QmMKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEhrV0E4b3VkOUZwYjBXTkF3UUhVVklLWXF0QkpYRjErY1l2dnFh
VWZvVkEKUGd2VGtVaEFqc0lpZS9Jd0pSQ2IydHBUN1JWTGE4MzZZT2RXRUt2eVFI
YwotPiBzc2gtZWQyNTUxOSBuanZYNUEgelFPWGtneFhDWmFoc2FIL0RwejZuS3Zr
ZzBUREMvTUtpYlNqdmV0cHBscwpOMitLS1NoVkZwYmZFcnJRWkRWVFJ4Sm1oTmhG
WHRjaWQvZWNLcVl5ZURvCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBRMTdyOTRWV3NQ
T1I0Wk1jOE5KSVFFaUEwTm9iRElCd1pscG80czF1U0E4CmREU3BNVklzOXZKVFFp
UWRoYXp2UXRxR2ZhbzlYSng5akV5Zy9hZC9uWHcKLS0tIFFjdE5KN2lxMFQ2emJh
d1NwRm8xaHpZNGxQbFUzSTh3MWxJRXViUjVBUFkKr/OxDAiV2XR3YZDdT1DSPUPk
XQrbpI/urpfXPyQAzXH2IwqRU2H56JHH2Q+z1OK6/BDzpxyFf1HmK/N9p/00osK5
WPeBVcNDMmWD/RlgEyooxyajK6Q=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,15 +1,17 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBQVzVy
ZmRldHhVenI3RVdOQXkyQ3pQUWM3N2l0bFBqT3ozakp3Nk5nS1dVCmoxb1lzVWd1
YWZ0UWd4TExELzJ1cElsQ0o2L1g4TVBpZW16TmxvT05GaFEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIDR2TjdhbG1MelVVTXF3WUhFRWZKRGVoYUNwdy9hc05uajg2enlY
S0x5eWcKSlM2YjFCRi9yN3ozVkhScXM5S0dNRnhpeisvNlE1Q09CNVFvN0YwL2JR
NAotPiBzc2gtZWQyNTUxOSBuanZYNUEgMEJtR2JpVk5PZnRpOUVuZHZJTDI3Z0Fa
UUdwWXFLT1gxZ0c3WFBlU2dDawpreE0yYUxoUktveGF5NXE4VHRva1hNdjdpYmZn
R08wQ0l6cXpvYmhRMXRvCi0tLSB0UmFTdVBlR3NTSkVzdGtzOTdmSFVERC85dU1z
cHdMVFdYSTFWUGRDTm1nCrengYn1phCUDmVH29uRjKMLNDIucrpi1s4t8ciQ3ILG
sz605ztO3UUlm4SQTJnXmktRDBlLu/xICzEo5okkNl9HwK7s2Ok2DAoz8K/KeFbS
65K3a3RcZEdWryZyu/N12HAqu5FDw0wIbvLJP4X+EcpUJXYHr8FluLUSEQg+sORW
FnL5tr1vK32ZQY4GIHZXh4hQbNoZo1v2ezkcK21siDkeA3e3PT6Bi0I90nuXS9Pc
0rZFZeYlNtI1Y4aeg6NEWytt
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB6R2Vp
T2d4eDRDdGdIZVdZelRUY09oRWtwTFpDbGFEKytiOGxxQjgwakRrCnBveWptbm5P
Q2lkaG4vSWZkS0RjM0VuUWtsalovZkJVamJzV1pWbGlDTzAKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEtuMnZvcGExWmJZU0tsdTJXa0ljeXYzOEJKV1Qrc0xNSnE0emJI
czdQbjgKM0NFc29UZTFUbVVrbFIzUDZhUlkrbGxSSXl6SldnYXh6a0hXSVlHQ25v
TQotPiBzc2gtZWQyNTUxOSBuanZYNUEgc3R0Qjh0Vy9mSnR1eE5rajU5ZG56OFVR
UUNLYmJyVHYxcUlsbzlTVGRUNApzcW4xVXp3dTVaVmhnVXdoUnZ2MlNESnUvVVk0
ZkRFVVBhdjZsMzhHRzZvCi0+IHNzaC1lZDI1NTE5IENxSU9VQSA1MW8wdXBYdXBl
VjM3Ukc4U2tSWFc2WDJaVWo3aldvazgwckJBZXVKbkFVCjFaaHhENHVQOWx3Q25F
NnBnSXNJRjlwWk0zLzY1NVE2Z1M3dFhLMzVBT2sKLS0tIDk4TTBhNHpjS2lPRTlk
VllRbmV4YU9xYUtEaVNWRVRrb2ZheSthWTAxcVEK9nC0bUWE1W8lmXZABR8IJAnI
to/at+EBAj4gV+UvTpqBmQ9xy5q9ih+L9VH+WolUQg5To5nzSKDbhwybzwEj1YUd
5Oqm1waFqasvLe4tNkNZ1aEVbc5VFY6OBCw3nVRESVR8AeuDnL8rRZyYpZjEwCZu
Qay0cQUSJPJQIKES/UzSrUj+HAw2LxPPAZ9xrDa+QuU36RfPHzmAoVMZ82MxtLxf
vLgxoUM9INybdIoBncihj90U+o8PC8Mud2DBm/FGkx0=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,15 +1,17 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBDL0tZ
TG9JTEdCMkJ2SnRvaFVLalZIM05JWEc1U0JSK0Q5aEg3TTRscVhRCjhJRGJYL3M5
T24yRGVQZG1heTJveU1qWCthZ1RJVkRtTksxVGhhR3dIMWcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIGk2RDZjMEtDblNDcCtvRnFkNnQ1elEzUkdyWWg3M1hNcXBTaEdN
VGtLM2sKK09Sa3NZNnc3SWlHRXBjcVE0Z3ZHSnY0Zk5pS2UyQ3NSMWh2VzNJeTNm
NAotPiBzc2gtZWQyNTUxOSBuanZYNUEgWDhkN1B6ajNYcTBGeCtlbHhacnB4Ly9a
ejJCSVhPcndST0dkN1VZZE1nRQpKeUhCWEk1RkdjajlFMFgzajdmclB3a3FORkp5
ZTRQK3JXcWE0YUIvL2UwCi0tLSBBYkFQcmwvM0hZbEtBWG1oVUZ5NVhoT2p3U2pF
VzhGL25La2lJRElDL0o4CtVNQVuouGOOXtVTwdeBd4+CJyglCjFoDoOpXdH35fni
Azr6JyfKbBlcavrghACWVDem24WIKq7uh9BSL2yHd+sj4umDybuCk9RZWmLgSaHV
g7Y3jiHa/NTvqd+Wr0PBas4TcOLcICQ0rg9gWnYH+QQDdnv+At4Eqp2/X1ztTI8O
PRJr7O6HJJasPZSsQldjs3O3fMiLiYPSywCTmgU/gstnv2YhbA3m4vhqOeRskuNg
X0qAd8jso4Bo7jHohmLLzl1c
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyA0bkg4
WkZTODJsOFN0RGtzQ0F5RzhmQ0ViUDBobXEvVFFidXNtNTRaSFI4CjBraW5mUmgy
QzJPOStxdmRXSVY4NlNkZUUrcThGUUhpZUFxVm0yVENoNVkKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIDc4MCttZk5aUlNoVjZZY2RwVW54SE8xT2gyYk5KSXFFQjFjT2ln
aUNhZ1UKSTJzdTJTTXBPZTVYVXRMb1M0c3FtSDlyd2MvdVdHYURMSHV1WUF0TTZT
MAotPiBzc2gtZWQyNTUxOSBuanZYNUEgeEd6Zy9CYWRKUFNjUHRZd3ZEMmR4VCtK
cGR5UWdFSmRyLy9iblpJNVRtbworVEdkL01YazZyZHA0NmRXKzl1NTIyM0FZK2hW
emlKWGhiUjl1T3lpcVhZCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBBN21XTy9qQldX
enRxcE5pSVl2YXQwckIyQ1NueG5lbk1neGpDdThkSm5ZCm9HZlB2dWpSUWkrZUht
S21wMDE4anZrMUdSUUdnTFJmWnhXUks2ZmhyQzAKLS0tIE5JekNmSkdjUHcxeDdP
YVpLODlCemZkallwODRlOVVaOEk0UEVYY0Nxd00Km4HzHO0ciIVLi9jVf1WL0v70
9tdZZIXF1aklkmvwpKZyIBSJc2cDm583czRyrhy5/W2h2xLYSOXdL0NVKJyVgJj2
Y8Iq3+nLStZ8p0TL9MuFyY5HXkQpJzFeIrdFRj2vcQPVP1txZd90se8WrUP4k/9h
xrC+MHllDYR5lDXhAUhS42y746Ixm3iabVlPDzcccPJS7nvT4w5HBwkhWaVvb1/1
cHD2guHpi4e3BbT5ozKADmOHajfjRy+j+gwFTl0AjGg=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,15 +1,17 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB1VnBt
RTV5eWc3RDNUR2lOWFRaMlgzREQyMlcvUFNxV0N2Vm9lVVZKOUZ3ClJjaWtYZjR5
ZTB4L2M4MFB0UThaMzlRT3JkUEE1N3RrSUlpZnRFbmFDdWcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIE5iTUs1ak9VZjRIRGpLMWtDcVB0RjVFRW8vOENQZlkzeGhsYmFB
QzJ6Z00KZmcvZ0hYMjN1bGZwY3NvMjlCbnpHUWVjdVU4cnBGcDQxTU8wZ0EyQXdU
MAotPiBzc2gtZWQyNTUxOSBuanZYNUEgazRzK2ZnSUZNWURoKzZMZmM4VTlDbVBh
WGc4MlE5TGFiN1MzV01FT1oyQQppRUhUNjdlQURNQm8rR0JOOUJFNm9vaXhPTXFW
U2lJU09jWVA0TDRrVHY4Ci0tLSBudWJTclRTek1RWHYzYzA4aTduODB0NUNWbVVP
cUIyVzJncWhDS053d25nCneJhp1QT1v+dAguW9wAKDgWST59KNBgbY01jkf1IqXc
FbmkctPIMggim3uCBqjzBboYvf+dtt0Fcu9aiB+4YmGUeQNb+9mdPweXoHmVrego
XygVsbuSP4xKWtIJhBJ/3/jEK9LqBtv+owdUIxbw5Ci6A0JvSu+tnUj5oAgMyT2z
YrGRK9plQZteeUkMcd6+anSEUpP45lzfz/T7loD9ViCbPHRuUFgwkwUcRGjQStm3
pnx9bi8N4ac599f4KqInm5gd
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBEVnpD
S3FrMlhVZXpEZ1IzMVJpTGh3UnUyaEo0VU5iR01JL0dKVWpCUGpjCmdoWHUzRzBh
NCtMK25aNG8rVktpcDFkVW9yd1dOSExxNUo5RG9CWDgyUzgKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIE41U2Y5QUwxZVYxTEVCVlczMjlUWmxYbG5oOEd1YnR2UUJOZ0hG
ZU9GemMKaS9pYzQvSG1yR242UDlFQ2M4U0F0YjlHSzZBOUtvRCsybmhOclJkZkI1
OAotPiBzc2gtZWQyNTUxOSBuanZYNUEgUVdES1BCdFljL2JRTzJSSWpFcWw2b2hQ
MFZqZTlyWC8rSzZ6RnI3ckdHbwo0cnBDNHdVNWFlMmxCZEVHWW9Tb2ZQMXc3WGw4
WUszNUc5aTk2MDVERXRrCi0+IHNzaC1lZDI1NTE5IENxSU9VQSB6VXJBMit0UytG
N1l4cHd6cTZudlBzWEcvNkhHVldOMnQvK2JWWVh4VGhJCmh0VVUrd0dEMk9XNVlD
eERYc1VtdjBHUEZZQ0pNWjF1aXRmUTFZc0phaDAKLS0tIHhVVTFDcjVucElUOHlw
T0VMUWVTL0R5ek16VmlDY1dZWGk2aWV3TjdQMVkKbBB/Ixe0nuEQ4WkOguVk6oRI
h7gasRs0CYNvKoIjAf66tJ4IC6CumJIo2JRkH0CU94nOJhPqdPL5VS2IrJOznrWY
bZolkeTJxq+IDUZVTNk6b/7TSmhPsKNgAZZdEQp+HSwz3sy1wZIBTkc7Lxml0Vvy
pBjh36wBjPLYJy69KAxsI13YYlT8gGw6dHQutBlVRzH6zL+To8TQ/TMDAwKHxkJA
6Bv3SyF5AvVYtJhnhT2Ic9fmkbbkohes6illUlpZTPU=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBoOVF1
NmZocHpQQnRJcWpWUHh2bU93NkdnZWNzSlFiaHdTd24rcHpsczFRCmJaSzNkNGs1
UDJCN2dYUVE3UTE1OU5RUWljQlN4dmxuUnpOMFYxQTdUaVEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIE5HdGd6aTlKM0lFUlYzT1VhS05nZ2ZxTndVZHBNQlJxYlovdXkx
ei96d2cKdzlUYVFFaEIzaS9LZmY3MzM1RmNnR0xjOEpHK1kxM0FMTWRQSlVnczVF
dwotPiBzc2gtZWQyNTUxOSBuanZYNUEgQ1lhMGQvUy9OWkRBR3BZV1pFNmNtb2pq
Y2VEUzhRWGVWUkZJY1l4RGtWdwphdFZtM0ZLZURvYVZQYjV4bWVPdWJxa3RmWmVh
SHl0T0pQWmxnVlFPR2drCi0tLSBnd2lwS3dqUk5Jelg0b3RxbFdEcnJ6ZkkvZTVN
UllBeUUyOXBxVDBKMG5BCkGo9kj9sMVhbnXVM35lGScAb8r5LH9vf5jOdhLC/Wj2
+uA0ONIh7F2GELzf5Cw1KZJ8aHTURM2r41vZvfAQN1RwrmYOiUzlyMrvTDe78cY=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBzTVNj
R1FPalhwL01tWkg0REtwZ2M0Yno5RVVDSjJsQ1VUS1dWak9aeWgwClI2V1c2bE1w
RzFyVWlibVZzV1NGWEd3OWNOWG9jRXV1dHRTV2k0RzEreUkKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIG1nZjVqbzlnUEZtSkxmTUtVNDdFS1NQanVmL1RSeWRNbk4rRjdP
YWw0WEUKdFp0NGtuMEtQdUhlNTN6MmdxRDY5b3lPajhoRVAvT0llQml5cGZLdFlm
UQotPiBzc2gtZWQyNTUxOSBuanZYNUEgY0xkSFM5Q1pDRTlCbjRZT2FnN0JxR2h3
ZmM5NGJkNGo5M0tzak9iOGZUOApiVmNic2RpSjB6M3Jma1V6OGJjTGlmL0xYK3pP
a3ZHYVhMMDBGZkQ4TUlFCi0+IHNzaC1lZDI1NTE5IENxSU9VQSA2K1lBMlFaVEp3
cTZNZ0duTGlXc3JmUUo3MkYyK1ZVRWM2VTMxekNhNHdZClE3RDlub1Jab2VhbjFx
RHhOSHNnMGhEcjN0ZytsZWV4N1AzRFRDT1d6N0kKLS0tIFJSMEFkaWhMMGxQaTlL
MW12UldodHcrclFvQ080OEJBekh1VTZCNFEybWsKo6mw3I7uX/jwJ6moOGpqSltT
BRsBwTeNrIdc+FR60l4sP8nRI9KV/7wyce9aFhqtiFTBNnGDXRcjJDrqactCiGcB
Geuhsjc9ZMwjJEATbQ==
-----END AGE ENCRYPTED FILE-----

View File

@ -0,0 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB4R0xH
NU0rdGUzb0FaeC9JWUtJNUd1V3dFYWpKbm1ONG5MbFE0dE1obDIwClduT1ZTL3o5
MGNHamh6cWF5S3RlTGxGRWJnRE1xU0FRYkpETDgzTUpLSGMKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFhJektxUE84aC9BeVVlalJxUDFabTM0dWRHN1ZMY2tMb1JVSDZw
RHhTQ0UKQzhlTVU4djJKUENEVXpoQVU2azRBQU93d2JGamwzRjNxc3VCNVhEbVVH
TQotPiBzc2gtZWQyNTUxOSBuanZYNUEgZXZnUWt6ZHFxTW1mN2RtYy9IdXBtL21N
NG9wMEQ3WFRNTGF4M2NYU0ZtVQpRMllFVk9GV2dCeERIakpXZnIydXNLMWJwNGds
dEhyNjRSL29COU1uQlBNCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBiVjdTWlAwaytl
aWJwTkZNTTNwQVhNUGl0ejRiRHppWWhaWi9kWWk4QlhzCmJxcExjK2loWUtwZDND
WjBXRUFCVGFLbTlKdlVieTdSZ1hlL0ZaTkNubFUKLS0tIDNVQ2NCdDVHNGUvZXFM
azdWUmh6azAwMnJ4Wm5UOEdGTmRBenJSdUY1eGMKx3sYbX/g7JVCFrwVe7UNLkWn
1p+MbGJcRS0ucxNIEniCBafaVnXDiRAHtaWSCqtbvZ4SVg==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyA3Ynp0
UUVDdVk1MG1nQmZ3cDl5UmY5VnpMSkdyYmluTlJGWUdnRVQyVWhvCkNlQkY0RUR5
ODZTYUEzQlBmelBLcUxuWjdiYms2RUtmYlFFeEpXM3JCMlUKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFNySTEvUXhycFhZa3h5ZnZyaXJEZ3BGRW03WGRvM29FQlZJQ2xx
ZnMwVzgKbGFVMDlYZjVzeUJyY1kyc0ZXRnVydHkzOWtPaE1uTXllbHhaQTdIa016
VQotPiBzc2gtZWQyNTUxOSBuanZYNUEgdjh4T2FkckZYQlpsd3ZSTmc4VGRxWjg4
TVRCTUl4U1BnanVwV29POXhIZwpEcHBUOFJjTXBGTExYTWtmd01XQlZndklXTkdU
NHBnYkNBTSs5K1A3cE9vCi0tLSBBa01zRTdNYW5wRlltVkgrWG9mdHcrZ1NXRUwz
UUhsalZSeU1CVENmbnp3CphGOZ7hu3mq3UI69UCJq7ptFDMUmdmYW4ydzz2RVlYX
P1JWkX0IpnHtcFPK1XmRrBkiyto=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBJQUVJ
aHZzMHNaME1zUDR2dXVHMTFvc2pqZnV2Z09YZ3FTM20wdGo4ckFrCkFOc1lCQmhv
STNpT2RlcWhNdzYxbEFvNzV4cmtoYm9waWc5cXhkWEM4eUkKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHliSURYL0syL1N5bUxWQ2NOQzhWR09kNUNqaGpWa3lrR1M5Qldv
KzlvM00KM3JvRjlBZHh2UzVxbW9rbUdIcUNOWkhVbEFETEN2VTdDc0lMV0EzR1kv
VQotPiBzc2gtZWQyNTUxOSBuanZYNUEgK0lkMWNuUFR4ZGZmaGJpOURVS3lBbGti
aFA4anhUNEhYLzkzT3hZZTJnUQpmSEN5MzdVcWYxbTFpeGRlODAvUFVySGRoUVpE
NEd6aitiVm1vR1VNcnlNCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBiMjNoUG9jVTQ0
akdPcXMrbVo4OU1mODhkMHlKbzEvTEJObGViVXFaUVJZClRWaXhjNzB4b3hvbkVW
RUFWWnc0QkFzOEpXWVdZOG1TbDNLQ3lkdkxVRHMKLS0tIHNRNlIxVjhsMEVyK21o
a214bW1BKzVHbkZrdGhndkhnMlgrWStYbXoyVGMK8hdGLDk9xC1OnfTNtHZLbZCF
KKw9JFl6b8++iwM2H8cQgWk8qZWQUvyO58ahkO/xtOCXCA==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBsb0pX
R2RJRlJkbWF2a3BJN25ZY3ZwWTNRNDFhbWFkRE5TdkxDNUMrUms4CjI4TVN4Rk5U
a0xMRHVQSEJUcVJTQ2ZLd0c0c0MxM2thMFpyeXZ1NGM2NFEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFFnN1VkSzVXVzg4UGFWakxweWRmSldWbDBOMW9xYWJQek1Ielk0
YXVrVFUKSzhUNVd3SGU4MkVZUXdLWXpFL3JCUWxOSitHOEJzQ0pXN0FKSXZ6RUFm
NAotPiBzc2gtZWQyNTUxOSBuanZYNUEgVG5jYmFCTkFmekJMdFBUVWJscmN5dUxp
RngzZEFEZUJINDBwUFBIUitpWQo3aWlLRDdoUklhbDlNeFJjeXFkTnJFcDJiV1Vv
ajBQQzFlaTFwWVFDSjljCi0tLSBWS3pzSWo4SXpIallxc0JQWk9LSWFDekxtOGRp
eGhYSEdqL1RmRnhtemMwCmQ5wc817Rk+Rs8RHXMe2Gm1mKbFOFMVrWFW5gLm9UHE
T05kZ7OBh34D9B7jmFokYM4uQBXBrydcb51TGVLXXgnN
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBHR1lJ
U0gyb05HSm9kUmNjdmdGQm1XU1ZCbld0L3lxemdMK1dlUXQxM1MwCmJwRzBGM3lk
ckwzTDVqcEFOakxaMFYwWHQ4MFZ0ZjNySnVRU3FZbGxndUUKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHliMW0yaTdXTDRmcENtZUJhaE9NQWE2eGwwelRnM0ZydE1oeGtj
bkVjeGcKaUtpMVdzSVBDTklUMDFjcmo5SCtHckhLaUxHNnMyMUZrNy9MeXZtSnp3
RQotPiBzc2gtZWQyNTUxOSBuanZYNUEgaW1IZjY4VnlFUUVJSzdnVkpFMllic0Rh
eTFydGcxOGpWczhxVktxVi9ROAoyUE1PeVN6b0RDVHJGMFJwdWk2QkdwaEVVK0lU
Zjh5RWFSSjd3RHBNcFRBCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBFNDhwVk0relJU
WWFlcTFPRWlZLzRsOUhWWFhydS9teE9RRU43Mng4Y3pvClcrVWIrRjl6RnM3emJp
RFFGaEFka3VLQWg3UmUrN2M1VDVlODk5MGZvN28KLS0tIGRsdnpEc2YrdDJldmE3
S2xxck5hRlB1OEdZL0p4ZmNBMHA5bTNzUUJ6REkK4/pCDRQsb6e7TMT9I92Y6P0P
i6K/cnbu3GacXRXGdA21L3DVu5TFwKaym2pIbO5JdO/G1Ic7jQZrAg9GOHnNbSs=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBsWmI2
UisyZ01rS3k4R0tJMThNdEZUOXZNVnV5RGNtVTR3V25wb2UwUDE0CnlGc0xySy8x
L2k2b1VRc1M0R1p5MkVTUWxHWkU2ZEtTSDFXK211V0ZHQTQKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIExWdlE1M1ZldnpPYWVta3ovdmdEU3VtZU0xWWFldnp3L3hicnFY
Y0dxQjQKdEFHa09Sd2IwUDRwM2dMK1paTFNESUJVRk1NNUFScXJGK1J5MkdtUGZv
YwotPiBzc2gtZWQyNTUxOSBuanZYNUEgVnRhWmtLTnpDSGhRODcvcUY1K2VySlJK
Rlk4WW1kQlVFd2Y4bWRLdGJWOAp1S1ZVclRrMUhicy9xQ1NTZ21tazEraDFaU2tD
eldWVVR1S1BTRDJ4ZjVrCi0tLSAwdXF6Nmt4RHBFVnVzZ08yeFBLbWF3dUx1M1hq
bVRzYmZiZk1Sb1ZOZUZRCpm4DLNa9DuoFQxQux3Q90PP6G30Z2b0j85cZqyr7anw
fg3687eKqMNwl4qdGYeE63oeUHrxfYISKB41zRDHmc7H2w==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBtVFlY
bXJzdFdHZzVaZEtUd1BzWXMzbG1kUDJ1cXZKVEFBT3dQZndGTjBvClM1NXlFVU5S
TTlvQXBZMTRSTVhybDNxMWZQeHdRRmhTbis4NWhnQkorbWcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFRPa242RVMvd0Q1UmdJeU90Mk5wWEoxcnVuM2lTRXNCdEVtRExr
NnZoamsKVCtWQXk0SkFFRDI5ZDA1MHI1NmxtMzliYllXTVQ5bkYzN2NtUmV1d21x
YwotPiBzc2gtZWQyNTUxOSBuanZYNUEgSGRFb1hRZ2NiMGdGazUxak43aUhEZER3
MEhTcmdnZnMxT2JjcHpqbGprbwpJYU5iSkxsaldXNFZ6amdWUktqVktIWjJIT1l0
K1hDYmNXaTVVSHI2SVE0Ci0+IHNzaC1lZDI1NTE5IENxSU9VQSBqT2NqUHJraXpu
ZVhZM0ExV2NoeElPdjBYUnBacTcwOUpMcmtOVDRFYXdVCnpwMmxYbzB0WUZ4K29E
eWxabVhiWkJXV2NUZm10c3gzK1A0V25SNkJhQlkKLS0tIHlKN2dhZVo5czA5UUVX
WDJCNUY2dHhvbVJTR2I1NS8zeEtVYUNJOE85YlUKVI75zg9cgQVbLehC4/7bMPjC
zqqMV0+j0OaCNwXhi+U/RbILvmg+MzLMymUQkMihcE8W3XVILswMa1Exew2gANZ4
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBDRWNi
YlJubmg1Ly94cHgxbHV3dStaRkZDRXdNZzVjRCt0R2RNMFkxUEZNCnJxZnc1UHFB
MURselZuL1U5OHFQb0tPLytWelRzYXlvNngya3RQOXREUEkKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIDRiR2ZEMUZsYTlGbXFoR0NyZXVXMEZmS3BONDNFQUo4VU1XNkZ0
ZWFzMHcKM1crbDVsR2VmVTFNckxaa21MTW9UVWE3Z01qMi9VT0kwMm80V0tMSWM1
bwotPiBzc2gtZWQyNTUxOSBuanZYNUEgd0tIampOVU5ZeWtxNWZpaGdFQTBlWlha
Z0lBQWp0dzhMRHU5UnVzWVlUSQpnUHlCZ0w5Z1hMYm1Dc1UxQ1lLRHlnaUhJQllW
RGMvTEhhc29VL2JXZnhNCi0tLSB6TThQbmV0eFJ0d2pZd1h0c2RuTGFzUHhyYWJp
b2RhVTNkSXczRGJpN1UwCt7I+OsqQdQbFXhYPV5/kqDAr/jVoJ9H5PSfdLkeVIrr
AqScUaOrdctUZEBIF8/FouJkSbIiU8muBNrBKx9CylI=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB6VXdX
aFpYYkxJM1dJYlJJY2h0OTJqaXQzcmFMRlJyWEg2ZldrbE90Y3pNClBQMjhuaW1S
a0dPaCt3dnZ2YkZmZVA3NkZ1UmVSNVZUS0xIUENtYmRjMU0KLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEdWTVBVSUNhVDF4RUlFUjNrZFc5L2xwMmNRaHVQalZqUkk0UGFt
Tm1BSFEKMVlBeUtPWEk3YXZ3dmo5ZFlXV3NoU25wSk94MFkwaVVpM0VIYWdmRkt6
SQotPiBzc2gtZWQyNTUxOSBuanZYNUEgQjA0ZGJ6OHNybE9QVTJlZnV5WkpvdEJ2
amt2dWw5TnRKT01UcXhHQm5GOAptUFB0aDUrdGJTTTM4ZVZsRDd5ZHpyOWxZVWNC
MzRGdGVES2NCY213ZWhRCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBBRFMyczFWSEo0
Q2xoZGxtRWF3YnVMNmE1aStmVmRZTWk0UHpzM29LS3l3CndWMlZvbkxhQSt4cFpL
U3pFKzhzUU1ldG5ldkFyRDFlYVdpSVUvclZsbVEKLS0tIEpDcG9nNmlrc3JTRXk3
QW5xSGdGbFFDN0JhdllPdHNiRzVFbmhUcFhNSWsK5joyQar0MfzoOijEHGRvGQTo
UYLzJej6x+7TdpVEjTMoSClK9EDfGygYzNV4c7p+TjLb7ABGT8Br32oG7v8xeA==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyAyVkNR
d1lsUmJWVmlxb3NnNTJNN052ckRPOURYR3VCWUFpd25aQTBPVldJCnBNRTdlOTNP
SkhHZkZVU2VrV1hVcGczUVVZVHBtRTNoNUliZHNpeXltZW8KLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIGJCWktmWDE1Z1Q4M0RDKytaZndtZmlCeU5paXUxTld4d2FNV3dT
Nyt3aWsKTUlqTys0Q1RiTERlMnZRUDJMZHJheStYak0rY01jWVM3STF2QjExZzFm
UQotPiBzc2gtZWQyNTUxOSBuanZYNUEgcm9wVTlCKzFEejdlNVp0ZVpnRUxDUmpo
YmRlZWVpSGJocUtNN05KS0cwTQpYUmdpYVNVemZXWUd1ZUlQTks4VUdmaEZPZ2x2
YVdqWG0ySkt2dDNSQzJvCi0tLSBaN0gwclJpcUFvT0pHcUhyVERnZ1Nralg5bGxZ
b0hyaVB6OStpczQxclFJCmHfg8XI+AzbijptcC6Zhqigp8D3CvB8mSF5H6kPFmJU
odbXmgzihXxWjnG6tH4LgEiEI2dWfbELIwqLs4BIiLlt
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBiK1l3
cXJiNEJoV2hTbDgzRHNwREk2K1VVUDdjWHZ6cnY4TUVqYmZCeTNVCnZrc0JRbDhl
Z2hMOEhLMHJWakpzTjI3UEMvVFJLM1VIc3NXa3k5aUFQVmcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFIyVGpFa2tXa0ZXN3haVVRxbXE1VGpjT1NESnZ1SUlaVG1xY3Nx
YTZOaFUKZWsrZndqeFZmampSclJZUWU0Q3NLdUNKYTFNOXhmeFMwZVB1aVJodnFU
VQotPiBzc2gtZWQyNTUxOSBuanZYNUEgZ2tYS2swYWYvRlRraVYrcGRMODVxL2dl
bG14dFRJVHF4NVIwLzFydkt5RQpKQVQ5Q1F2cFlaWndmYnFZVWdTUHZRL0E5ZWV3
WWgvMGRwemV5ZUZPMG40Ci0+IHNzaC1lZDI1NTE5IENxSU9VQSB5cmx0TnRaRURT
MkRoZTV4YTB6QnJKRWdaUzVBV2xRclIxWVVzRUs1b3h3Cm5FY1FHUUdjTSt5U2Zh
WE1tNERvZ09wNE40STlKZDdNT1ZuTUhhWDVlbWMKLS0tIHZTL2F6SFlubHpDS2g5
bm9qNHFxMHFwMkMzYkN4alR3NGtWUjhDTVc1YkkKjbqfpGjlQNQrKciqoC2wxgQl
kdWTvPjACx+gYYybbM6yMSpqCds6Wu3DKAIVvHh66Y5fWm6NrS6K49gCjd7c00s=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBuRldh
Um5iYmpEZlZHMmFTMTQ0WVdUUllBeE9MNFFWdXlwNmoxUU1VdUQ4Clk3aXJMYlFM
dFFWODlIamNoc0xGVUdSRktVUllhSHpXR2plbmNkcFR0VW8KLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEp6RktOMFVLTi9NRTF3MHg0Uk4xRzRlNTlIajVKeWtxN3huNnZN
bDdwRzQKMTUvQ21BWXliOFdNRVFUNjMyS0tyeEt1bURRM2JVMXFIV2cwZDA5WldC
dwotPiBzc2gtZWQyNTUxOSBuanZYNUEgNWlWYUV5SXdCbUJjbnd4UjVqSllyNGZX
bUtIenJJanZCNUdtZkIwQUZYdwowUUE3cHpTRW5zdy9MUlg5VlZGWlNiZ2pVbmUy
c1V0WkZJckJUY25KWmowCi0tLSBxTWg3VHN4MHlVdWpLZzRtaXRYeGEvOFlLR00w
bkVzRkltY0lON0FBYXpjChPtxNyevNnkMHYc7xbsZo/7ThtPB4uOqHfF8swX1efg
AHsWemHnBEfsMBEmCtmczOhFwCNOtgc+q3rQCvmuU9tX
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBaT3Fx
Nm1RNHpXQjJxZVE3RkF2S3M3KzdjK21Od0NDd2x5RmcwZXVZNVFVClBqNDRFK0hn
WnpsOWFkU2l1UFhUTGhyUUFwQTZLb252VVZKV1JRWmJQODQKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHdZS2luQ201akdBTmI5ZXhCazlhcGJXSDhBZHlSQkRMdUFpN1hG
azRLVlUKTWxCQmpIRy8zN3BxcGRFc3lseTI1Ymc2cGFpQXI5d1RsMkxkaGJuKzVp
bwotPiBzc2gtZWQyNTUxOSBuanZYNUEgQ1FmcFp6K0Y4UXRrU0tlVVpYUG9qMDR1
aTRwR0tMM1hwdU05YXVPZEQyZwpYOVJoc1phZUNHV2wwOWlQUitZTU9vaVhEVE14
cjFNekVDaTNFQVpUNzNRCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBxMVlLSFFjQjFD
RkFEVVZnT2dqd0ZMVnV4T2loT1ltVHoyNnZoZzgwNDFZCjYxUEwvUGJidDU2UnY5
c3J1NzU2d3JpaVU5eThSUGNENXhIVDZQSktzNUkKLS0tIGczblFPd1FLQmYvMUZN
YUdIYXk0NmxsN2krOTFncm1MczFBT3RGOGxDOG8KfClHc8j62Vt5d0JH0CLEUAts
amY7zEWKS2wGnLWk9SU2ybe0nsZ0wfUky8+PbztOomEXRxGfX5jc8j2cH6VNW9U=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBDbFRU
RjZFN0Jtd3o4eWthZ09BRUIvNXFZOHVLdVIvRTJCd09ULzJpcjI4CmVjb2szMmtI
N3I5a0FKQ2RpeHJ2NjhwbWM0OFZwUFUzZnV2QWI3VDEvZ2sKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHNEd1d6bGY3WVVVdVV6TFQ2V3NhN2xubWhwQVBIVVBmKzRBWStX
eVpzaW8Ka0o2a3ArSjdsTEZSa1cyVGdzZThGcUVFKys2UURaRUxwd0FjdDI0VmVJ
QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgc243YjBiOFdrQlV3SDEwWjc1TVB1cita
WVk4bk0wbUk3elBJMkg0Qy9DSQoyVnNWQTJzU1laZ0pGZVlsTEVWV2o2bEVpaVNh
QVNaNXVMaUpKTzVlQW1zCi0tLSB6SG5LWng0OVFGd2NvODVXclgycXFpSVFrMnFk
VlhaL0h2MnBZZDJrN0ZFCtbPQRVZWx65T3DGVY8yG9D2tj1R9ccMcPyJNxJsmfsx
hcINJq2zJKLP2mtvADH95uoaQylwpQQiVd8s6fwMH5cX
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBqbWVP
RVNIVFVJSW4rNWFNbXdxZUdTcnBQR0k5TUhKMC9CWGxGQ0hValJrClcyNXJJQzdC
VmFYQVkzQjZqMXpDMC9nazVhdmdQWVA4RHVBTUNOVUZJaXcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIEhPakxYZmNsTlVYZVBjN0s2ZFc1VjFId2ExNXZEa3Fza1lKWktj
MzMyaEUKczZ1SGtycFIxQjlWWWQ0RW5ka0pLN2hocTh2V0M4Z0NscDByRnJpMHlZ
OAotPiBzc2gtZWQyNTUxOSBuanZYNUEgeHZ2TnMvbWNhUzJOQ0JZNXZSK242Tldx
M3pJUXJPY1BWa0ltUG4yV1B6NApyRVJCOGRoYUJYNE5iVkRuSXorQjVwU25CTmkz
TElqRUtTRmNxT1lob2JRCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBmT2hvZGVIc2wv
d3V0emkydDNQRllaMDJSZmt3cE9uYXkyVlArUXJLS1VBCjUwSkR3aHd5akNQbzJS
MlVIR1phNUkvckhiblJGTysrV0JTKzF1MURkSWcKLS0tIFd6S0NJd1luVW1mMDNv
MXhRSzU5NDZ4VnJIaFV4ekxxZDJGZlJUNmtnRlEKmXBlM6PkajrVUhxQLhkx3WVI
UzKD+1c0ifWwm1QT/7/jodJgef2oG2QEBOVJ/HMzgQxfiXhoscjD1Q1nS1OaQLk=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,14 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBtV2FM
U09jOUsxNVVLQmFkOWxubGdlZGpGMlh0YjFqbTA5TG53SW9DRGt3CjNQeWRac3Ey
YlRkRnN3YXFnSkxjOTd3eXZLVHRmK3BIdTlJL0ZQNUhHaGsKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHJaUE0rc0dXaXkvNlErTmd0R016aWZ4eFM2bVh4T1pMa1Z6NEpC
aE14Z28KS2FpU2NCclBDMDJVVC9UMWJibmlsc3hnZE9GVUl5NUxBdVMwYXJXWXhz
QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgaS8zRkg4MWpLT3UwSWVBSmRUSW9KdXZ1
c2Ywcy94YXdKSTZlcG5PSkF6UQpLMWpoaTZ6cjA5dFlZbXp5dm92U25EWnFKODJN
MHM1RGtDTyt0UEdVZHEwCi0tLSA1LzRHMTN4S1ozd2FIN1g4aTR1Skx3SE0yanNM
aUpZU2tkR2xaN0ZDa3NJCjuPq+1BQBbHCbJAiTBI9EiJ9ddYrJxEt7yxjnbRx5s+
YsA15LKloxgnK+KU9TMLCFUIlgq0nheyeysMSnqgxhDv
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB5STJQ
VTh6VElvclJHWVA1dXlMYWFObEVvSDJaNFNCVjg2OERKQmUzcWtBCi9kRi9wUktm
KzNjNlVxNHVva2MwOTBuNEFEcVp4aFdjQ1hGaDlpQldEelEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFYyNkNwNmg1UVhtaGpzWW9Ja280SXl4MjVoU3R1NHhaWktweGlK
YXZhRzAKRFRDSmRwNVhOaitMNVh6VzJjUjd6dDdGVGVVSEhYVzV0TGU4WTBCb0p2
awotPiBzc2gtZWQyNTUxOSBuanZYNUEgbURadUZqTXNXUFFHZ3RSOWVOSWJLL3JX
ZTBNUmJoeTVTRXZQR0EyamMyMAptb1RFNk9GYStVRzhlT1daOUZrMSsrZUVCWWth
c3g2TjZyUHRqalM1QlB3Ci0+IHNzaC1lZDI1NTE5IENxSU9VQSBqRDdMTnNiS2RW
VnVQOXBUN1JhVmlOSnc0bjgxSmdnK2VTYXZUUnZkemhjCm1HMisvQTFrTUQ4T1BF
MzRFMDNZRWdLRWgvNnBFaXJnZDlpMVE1M1RkS3MKLS0tIERSaFNOcW8wSnd3N1Nj
TnBCWWlFcXRRaGs4ellIT2JGTWtqRFZaTHdKaTgKqliAH21whccGxY7qQlAGf/mt
BLsCDO82jjrDk4e9wN04lUzeqfI0kb9It5/2XqzW53vn3EdIsKV0wmraoSpwIbQ=
-----END AGE ENCRYPTED FILE-----

View File

@ -1,13 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyB1TWhO
N1k5bFFvODkwdzRGcGtFL2YzRkJDUjVSbUVFeXBOTExpK29uU2drCjN2cS9GZjJW
RGxrMlQzK3ZGVWU4L2M0M1d4cXJrOTNrcDhsdWUyRGt5N1EKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RICtoM2V3UjZ1cnVFN09pZ1Y0azYraENoWlN2ajRUeHRLZVlVd0Yw
T29BRW8Kb2ltQlpJZ1JUTkd6Wk14ZkFIdDliQ1JOMHMvVzhwaGkyMkl6ajFrYVNv
MAotPiBzc2gtZWQyNTUxOSBuanZYNUEgNThPSW91di91SWxtbTRpQVJwek94VGJV
UERvS2tITHF0SXVlVFEyLzJTMApuYjdsWndDd01mUk5LbXJWTkd6UEt3eFkvMk40
VDBpZmk0bUkxNTBWMzlrCi0tLSBiVFpxcjd4ZkZ6YittMDBBT25rOFlrcEpTdXg1
d2Y5TkdwZ25sRFN0ZjVzCj8h/4aeASCnUoK7Sc6LsY9ur3krKlF+3GMMvlLiRqsi
COBx+YbkwR0EfrxhLZ6DLHhM/t2jnWAMMzDK2a4volvQkdORLiRo3sfjR5kSy5N5
Ml3lFlXKxYQ=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBTWlJz
K3ZITnRqTCtqdHZGbml1ZUNQbEdPdjJmUjhDSmg4dUFmeDdUaDNBCm1sT0x3OVhi
YVo4YWI4T2lKVXI5RzdDeEx4RVI1anlkZWdJY3QyL3Z5a2MKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIE5tVEdZWU42VUNxMlVxc2lyM0lXYjF2SHJ0WDRsQlRHcUxVTGwy
MWVWVVEKai9IVUN5SmJMNW5kZ3hPVGJLaHNqWTcvREdhV2IvcENGcnJvR3B2d2RO
TQotPiBzc2gtZWQyNTUxOSBuanZYNUEgV0RVN1dwZVhQKzF0L2VyaEpPd2lLVXR5
MzE4ajIxbWkrWXNnVDhyT21BawpZUTd1ZW1LVlQ3OG9zem5JWlJ1ekxwdFZSUVBq
cnlhK3F0VXBib0RNSkI4Ci0+IHNzaC1lZDI1NTE5IENxSU9VQSBqUDRNbzZsNmpD
R0p5bFVhMkpTaUZ2aUszTDUyOElCWncwczBLTTNMMW1zCm1aY0Jxd3FpMVNLVVRZ
ZFY1WjdrTVg5SzBsVWxHcUkyNUhSS1NWQmsxakkKLS0tIDFLay9ISUxPZ09VSk02
a1FCajJiNU5JUHovNEQvNGE3ekdVNzJSQTROQkkKMkyKdbFB2IqhHLxw2W1UnpmR
IzWIGHRHfrMmGU3S6rIG4OM63kNQ6wU4dNw91vzJ9Im1MCJZa7ElYfffwdbw4J7h
IdEFgivD96G274J9tzUGMc/sVKgFzw==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,13 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBLemo1
TXRJdkYxR1RBcFdrVEthRUI1UEtWbm5LUlRKYVpOTUIyZjY2YlhJCmkzbEdmZFFN
MzBFQkN3ME9FcjdCOTN4T3ZlcWg1NEIydjZQQm93VURvcVEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIDNjMXpObEhuTWg5bitFL2VjUGtTcjhIMDYzeVFpQ0tpUnRRV3pJ
SGRwRzgKRkpzdzJsZ3N4dnhSaGplN0ZjQ1dpY0xOZHZyU0NON1NEbDc5MmtMKzhL
ZwotPiBzc2gtZWQyNTUxOSBuanZYNUEgaEFrMTZYNndKVWg0OTFtOVJyVTFPbjJJ
RHJwU0JsclUrSms5ckMyZTdoYwpmV3dlZFY4MEFYSEhoQnpic0NEd2xxOENIRTBt
MWs4RVNFUnIyTnNWUDRNCi0tLSAvT2ZPektwL2djUlNQdy9tek9hL3JmekJOc28z
NzU3cDR6TUxod0I5ODdZCnxOYrlDTdi8Y+m5PRxAYgS3u2cC1YlfXi5TZo1LIEjv
UxWwPwn8JAF9CYB1o8e6p/w+yMcUfr+2UHWo0GqLqye8VCGy7Vzk2S3tOCZJv+k9
+kQtMva6CND8gBZIIJ3aXoYshT4sLWfx+BAkxPQ=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyA4YWR0
eVNVVkNvV2EyTWNKVGZnd1hhSWRDeHA5QUtrZENrcE02d3RlV0hjCjgvSFVid1R2
QW9pK3BBNElrYXhscCtlbWxTTkNsSGlYakM2cWhSSUFHYWcKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFhxSnVVNEo4VU5uL1AzYmxia3VCYkpaM1hxU2hQUUE0NldjOUEy
Z1VJeEkKZWVLOEtRK2tnbWZwQ3pQU09uZUZxcGRIV1pjOFdudkVMSVI0bUJOdGh0
SQotPiBzc2gtZWQyNTUxOSBuanZYNUEgNWptNHRvbHFUR0k3NmV5NU4rRjh5c3hV
UDRtaHdSRDZmNWRabkFNaFpBOApWNUc0cFRSUGFxMmQ4WGQyS0NsaFBJdXdraHdT
Rm9XTzFyay9PQ29mVENBCi0+IHNzaC1lZDI1NTE5IENxSU9VQSAzUDhxUmVlSUFO
Z1hEUUo5SmRDV05ZbHEzVzNHcERIeTk4czBnSHNmYmxzCkY5WDVlWklBWTNxOFg2
am00ZjZaYk50V09wdkRNK281QzEzY3NGQVpPREEKLS0tIE4yWkNIS2lOK2l4MG9z
aVFjYkNvc3VSTEw5SWZ1bUZRVU9DN0lyZER6bjAKYzEI+KoTpI/pbWIfIyIMbodx
hKG/trp4JBn9Zmmg0YL6UA79rNDH/l89i5zxzCf4K06Sfc0P8ksAXuthXvLZ3Nqf
QRbEK13meeu3LJKbrRsWlgQ4g/2mDb3j0tSsTz21lturiHMVRK2KVPobUQ==
-----END AGE ENCRYPTED FILE-----

View File

@ -1,12 +1,15 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBqamNI
eGQ3Ty9td3owQWNyOXMrM1ZTQ1dSOVc0dEZ6UlplY0ZDQlV4MG1NCmQ1eUpTdURs
YkhsNnF5djkwdWRlcms4SFEyaTdFUFZ2WFpTaVRPRy8zam8KLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIHBTWEkyekhRQ1RqWnVpM2FQVGVqQzZyVFpuL0liZU9UUHl4dVpr
dno5UjgKbFZxL0xXTWZwYU0wWjNhYm9NZzVCRWhER2N6eWUySjV4N0c3Z3V4S2o2
NAotPiBzc2gtZWQyNTUxOSBuanZYNUEgeDNtdjZvQkVGZXZsUFhkd3ZnWkNYaTdr
ZlFuR2RrNTVZNWh4WUY2cTh6OApEYTBwcGlvQ0xVazIzUjBBT2VuWGczRkRyM0d2
YmdoMVRPMFh5NVBwb3RFCi0tLSBjaXVreU1LYjNvOVVZeTlTRldyWE02Rzc1V2xN
N082QUtDNXM2bEpRMlpjCp6Qtp6EN1L1V/mLp48M6uymwPmGjR1pAloYXDhXSiab
uz9LLBvB8qVp15/724DTLg6Mi72LVYiHZ+zQ3IB8kv7gjhMMryfFJSPErZfY
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBEcUgw
QlB5alE2Q2xUMlV1dmc1Mm8zbnZFMmJXUlQ2V3ZKeGlhL3NUMENvCnBWd1pENnZG
RVAyN3ZFTWJiSWJTUVpUK3pmdHJieWJkamNpK1R3c0t2dlEKLT4gc3NoLWVkMjU1
MTkgWXlTVU1RIFJiY1Y3QzBTVkNZZE5qTDJ5QitZY3doQnJUNWQ2dG9TTjBwdjB0
WENmZzAKMnhYVmdsVk53N2p6VmszMk5iWVVLaGhPUm5CVGdYZnlVdXJGcUdVTmhT
WQotPiBzc2gtZWQyNTUxOSBuanZYNUEgdXRzN1pndzJpbEdCR0MxcTB3QXAxSTNk
V1pRcERkcVh1ZWxLaitEY0hXQQpJZmhicjhpSGNySnNyc0wwL0l6cGZFQzVndnVj
LzY5TkVrREw0clJVSGdZCi0+IHNzaC1lZDI1NTE5IENxSU9VQSB1TUtldXUvak9w
ZWh2ZzM4ZmJEUmZWSCtjcGl4U2FrTWtIRUZ4YnA5ZWlVCis5V0p1cXlWSmdTQlhN
ZHdoamdtZXdjY0I3bXAxRW9XVWl5dXBLSk1NTkUKLS0tIFJDbGVvS3EzSlEycU9T
ekhKNnYxZEVzWWFBTCtUeTZiZk84c0twc08zV28KNGsxEB4hTgrU7qDRU/pETnmR
J5HcGjLsvpEU4cWrX9Cb8uFvqQZp41QD2Jqo3eZvt9g2fDuyKtXHI790Vqseh6H1
jQqtGyjulOODxCo=
-----END AGE ENCRYPTED FILE-----

8
templates/README.md Normal file
View File

@ -0,0 +1,8 @@
# Templates
These are new flakes that can be generated quickly using:
```
nix flake init -t github:nmasur/dotfiles#mytemplate
```