Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
4a85d9074a | |||
0865c62fe4 |
126 changed files with 1692 additions and 3556 deletions
|
@ -8,13 +8,7 @@ jobs:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
name: Checkout repository
|
name: Checkout repository
|
||||||
- name: Attic login
|
- name: Attic login
|
||||||
run: attic login nixfleet http://sisko.wg.aciceri.dev:8081 ${{secrets.ATTIC_NIXFLEET_TOKEN}}
|
run: attic login nixfleet http://10.100.0.1:8081 ${{secrets.ATTIC_NIXFLEET_TOKEN}}
|
||||||
- name: Setup SSH
|
|
||||||
run: |
|
|
||||||
mkdir -p ~/.ssh
|
|
||||||
echo "${{secrets.FORGEJO_SSH_KEY}}" > ~/.ssh/id_ed25519
|
|
||||||
chmod 600 ~/.ssh/id_ed25519
|
|
||||||
ssh-keyscan github.com >> ~/.ssh/known_hosts
|
|
||||||
- name: Build with nix
|
- name: Build with nix
|
||||||
run: nix-fast-build --no-nom --systems "x86_64-linux aarch64-linux" --attic-cache "nixfleet" --skip-cached --result-file result.json || true
|
run: nix-fast-build --no-nom --systems "x86_64-linux aarch64-linux" --attic-cache "nixfleet" --skip-cached --result-file result.json || true
|
||||||
- name: Report checks
|
- name: Report checks
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
name: update-flake-lock
|
name: update-flake-lock
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 15 * * 1" # weekly on Monday at 15:00
|
- cron: "0 15 * * *" # daily at 15:00
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lockfile:
|
lockfile:
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,4 +2,3 @@ result
|
||||||
.direnv
|
.direnv
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
*.qcow2
|
*.qcow2
|
||||||
result*
|
|
|
@ -49,7 +49,7 @@
|
||||||
build = _: nc: nc.config.system.build.toplevel;
|
build = _: nc: nc.config.system.build.toplevel;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
x86_64-linux = lib.mapAttrs build { inherit (self.nixosConfigurations) picard pike kirk; };
|
x86_64-linux = lib.mapAttrs build { inherit (self.nixosConfigurations) picard; };
|
||||||
aarch64-linux = lib.mapAttrs build {
|
aarch64-linux = lib.mapAttrs build {
|
||||||
inherit (self.nixosConfigurations) sisko; # pbp;
|
inherit (self.nixosConfigurations) sisko; # pbp;
|
||||||
};
|
};
|
||||||
|
|
561
flake.lock
generated
561
flake.lock
generated
|
@ -8,11 +8,11 @@
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745630506,
|
"lastModified": 1723293904,
|
||||||
"narHash": "sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus=",
|
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
|
||||||
"owner": "ryantm",
|
"owner": "ryantm",
|
||||||
"repo": "agenix",
|
"repo": "agenix",
|
||||||
"rev": "96e078c646b711aee04b82ba01aefbff87004ded",
|
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -22,15 +22,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"catppuccin": {
|
"catppuccin": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746175539,
|
"lastModified": 1734397929,
|
||||||
"narHash": "sha256-/wjcn1CDQqOhwOoYKS8Xp0KejrdXSJZQMF1CbbrVtMw=",
|
"narHash": "sha256-VCTVpU/RlrI9StxzDnqc1R3ZTQloLVALSkiN/Fgiad4=",
|
||||||
"owner": "catppuccin",
|
"owner": "catppuccin",
|
||||||
"repo": "nix",
|
"repo": "nix",
|
||||||
"rev": "a5db9e41a4dccfa5ffe38e6f1841a5f9ad5c5c04",
|
"rev": "21310cde33d3ee8023679dec01a9724a346c63ff",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -41,11 +38,11 @@
|
||||||
},
|
},
|
||||||
"crane": {
|
"crane": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1741481578,
|
"lastModified": 1730652660,
|
||||||
"narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=",
|
"narHash": "sha256-+XVYfmVXAiYA0FZT7ijHf555dxCe+AoAT5A6RU+6vSo=",
|
||||||
"owner": "ipetkov",
|
"owner": "ipetkov",
|
||||||
"repo": "crane",
|
"repo": "crane",
|
||||||
"rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5",
|
"rev": "a4ca93905455c07cb7e3aca95d4faf7601cba458",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -62,11 +59,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744478979,
|
"lastModified": 1700795494,
|
||||||
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
|
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
|
||||||
"owner": "lnl7",
|
"owner": "lnl7",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
|
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -83,11 +80,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745812220,
|
"lastModified": 1734343412,
|
||||||
"narHash": "sha256-hotBG0EJ9VmAHJYF0yhWuTVZpENHvwcJ2SxvIPrXm+g=",
|
"narHash": "sha256-b7G8oFp0Nj01BYUJ6ENC9Qf/HsYAIZvN9k/p0Kg/PFU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "d0c543d740fad42fe2c035b43c9d41127e073c78",
|
"rev": "a08bfe06b39e94eec98dd089a2c1b18af01fef19",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -98,16 +95,16 @@
|
||||||
},
|
},
|
||||||
"dream2nix": {
|
"dream2nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_3",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"purescript-overlay": "purescript-overlay",
|
"purescript-overlay": "purescript-overlay",
|
||||||
"pyproject-nix": "pyproject-nix"
|
"pyproject-nix": "pyproject-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735160684,
|
"lastModified": 1732214960,
|
||||||
"narHash": "sha256-n5CwhmqKxifuD4Sq4WuRP/h5LO6f23cGnSAuJemnd/4=",
|
"narHash": "sha256-ViyEMSYwaza6y55XTDrsRi2K4YKCLsefMTorjWSE27s=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "dream2nix",
|
"repo": "dream2nix",
|
||||||
"rev": "8ce6284ff58208ed8961681276f82c2f8f978ef4",
|
"rev": "a8dac99db44307fdecead13a39c584b97812d0d4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -118,15 +115,15 @@
|
||||||
},
|
},
|
||||||
"emacs-overlay": {
|
"emacs-overlay": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_4",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746240489,
|
"lastModified": 1734515037,
|
||||||
"narHash": "sha256-DWMG7jkpxrEGzTZZerDqaxT8X983tibFGfNeoWtX1yU=",
|
"narHash": "sha256-+DiZ5e6iZEawmqgpwLjP709pkXyuvSApmXkjYnY4yqE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "66bb2d7a4df96d0c1e63648850b7aed1b2e8d683",
|
"rev": "d7697bf2004fcb6508d3bf146e94fff59ecb2db9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -170,11 +167,11 @@
|
||||||
"flake-compat_3": {
|
"flake-compat_3": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1733328505,
|
"lastModified": 1696426674,
|
||||||
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -191,11 +188,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1741352980,
|
"lastModified": 1730504689,
|
||||||
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
|
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
|
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -204,6 +201,87 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-parts_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"lix-eval-jobs",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730504689,
|
||||||
|
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_3": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nix-fast-build",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730504689,
|
||||||
|
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_4": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": "nixpkgs-lib_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701473968,
|
||||||
|
"narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_5": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nixThePlanet",
|
||||||
|
"hercules-ci-effects",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696343447,
|
||||||
|
"narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "flake-parts",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_2"
|
"systems": "systems_2"
|
||||||
|
@ -245,11 +323,11 @@
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743550720,
|
"lastModified": 1733312601,
|
||||||
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
|
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
|
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -279,14 +357,15 @@
|
||||||
"gitignore": "gitignore",
|
"gitignore": "gitignore",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742649964,
|
"lastModified": 1734425854,
|
||||||
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
|
"narHash": "sha256-nzE5UbJ41aPEKf8R2ZFYtLkqPmF7EIUbNEdHMBLg0Ig=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
|
"rev": "0ddd26d0925f618c3a5d85a4fa5eb1e23a09491d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -338,6 +417,25 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"hercules-ci-effects": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_5",
|
||||||
|
"nixpkgs": "nixpkgs_6"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701009247,
|
||||||
|
"narHash": "sha256-GuX16rzRze2y7CsewJLTV6qXkXWyEwp6VCZXi8HLruU=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "hercules-ci-effects",
|
||||||
|
"rev": "31b6cd7569191bfcd0a548575b0e2ef953ed7d09",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "hercules-ci-effects",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -346,11 +444,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745494811,
|
"lastModified": 1703113217,
|
||||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -387,11 +485,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746243165,
|
"lastModified": 1734344598,
|
||||||
"narHash": "sha256-DQycVmlyLQNLjLJ/FzpokVmbxGQ8HjQQ4zN4nyq2vII=",
|
"narHash": "sha256-wNX3hsScqDdqKWOO87wETUEi7a/QlPVgpC/Lh5rFOuA=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "c0962eeeabfb8127713f859ec8a5f0e86dead0f2",
|
"rev": "83ecd50915a09dca928971139d3a102377a8d242",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -423,11 +521,11 @@
|
||||||
},
|
},
|
||||||
"impermanence": {
|
"impermanence": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1737831083,
|
"lastModified": 1734200366,
|
||||||
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
"narHash": "sha256-0NursoP4BUdnc+wy+Mq3icHkXu/RgP1Sjo0MJxV2+Dw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "impermanence",
|
"repo": "impermanence",
|
||||||
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
"rev": "c6323585fa0035d780e3d8906eb1b24b65d19a48",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -448,11 +546,11 @@
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745271491,
|
"lastModified": 1731941836,
|
||||||
"narHash": "sha256-4GAHjus6JRpYHVROMIhFIz/sgLDF/klBM3UHulbSK9s=",
|
"narHash": "sha256-zpmAzrvK8KdssBSwiIwwRxaUJ77oWORbW0XFvgCFpTE=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "lanzaboote",
|
"repo": "lanzaboote",
|
||||||
"rev": "995637eb3ab78eac33f8ee6b45cc2ecd5ede12ba",
|
"rev": "2f48272f34174fd2a5ab3df4d8a46919247be879",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -464,11 +562,11 @@
|
||||||
"lix": {
|
"lix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746186329,
|
"lastModified": 1733932114,
|
||||||
"narHash": "sha256-MLz0MjeVCaqvIvf5szUwNwYEiXC/lKWL0I2VS+6V/e0=",
|
"narHash": "sha256-LN4pgLjGWztTlJ4oDcKWvDuTFeUUVgbmXoZ2EXG20Gw=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "4e84fd9a0061a04627ec6962c0ed08c2ad0b8a7f",
|
"rev": "92ed9fee7d169febf53ea85961174fc0a22c2115",
|
||||||
"revCount": 17824,
|
"revCount": 16599,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git@git.lix.systems/lix-project/lix"
|
"url": "https://git@git.lix.systems/lix-project/lix"
|
||||||
},
|
},
|
||||||
|
@ -477,6 +575,32 @@
|
||||||
"url": "https://git@git.lix.systems/lix-project/lix"
|
"url": "https://git@git.lix.systems/lix-project/lix"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lix-eval-jobs": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_2",
|
||||||
|
"lix": [
|
||||||
|
"lix"
|
||||||
|
],
|
||||||
|
"nix-github-actions": "nix-github-actions",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733522041,
|
||||||
|
"narHash": "sha256-KpKmFgcUGQlAWhLUHyBn3AnTJLp7Kt82q2Cxfp3Yf44=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "df3edf37301cdc77ca5bd5f3f6fcccd6d0befee5",
|
||||||
|
"revCount": 619,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/nix-eval-jobs"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.lix.systems/lix-project/nix-eval-jobs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"lix-module": {
|
"lix-module": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
|
@ -489,11 +613,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742945498,
|
"lastModified": 1733522213,
|
||||||
"narHash": "sha256-MB/b/xcDKqaVBxJIIxwb81r8ZiGLeKEcqokATRRroo8=",
|
"narHash": "sha256-H+Pk19MzvI/TAbXWimUPZAoKkD56OSyxJBm8lVIA5n0=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "fa69ae26cc32dda178117b46487c2165c0e08316",
|
"rev": "c374ebf5548c7b6d4bf884369a5b6879cfc916ea",
|
||||||
"revCount": 138,
|
"revCount": 124,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.lix.systems/lix-project/nixos-module"
|
"url": "https://git.lix.systems/lix-project/nixos-module"
|
||||||
},
|
},
|
||||||
|
@ -505,11 +629,11 @@
|
||||||
"mobile-nixos": {
|
"mobile-nixos": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743812405,
|
"lastModified": 1733700802,
|
||||||
"narHash": "sha256-BedQ9Z3+nqtp9BRjHjJNPUeLIMVbTsP3Udbz0b1cUn0=",
|
"narHash": "sha256-YuhtFJLVW3d3zr5+VoyApm6PUFoIHhOCi+VOfi2LNzA=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "mobile-nixos",
|
"repo": "mobile-nixos",
|
||||||
"rev": "6679fd7a8dd4ccf4aa538b82216723861cfe61a2",
|
"rev": "0532a626e69fa9451e50297011008851527b9259",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -518,6 +642,28 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nix-fast-build": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_3",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"treefmt-nix": "treefmt-nix_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733069686,
|
||||||
|
"narHash": "sha256-lThMnu0otRxDTso07OU72+RZrUNokXwLKTjzTWGrxUo=",
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "nix-fast-build",
|
||||||
|
"rev": "95f5dc09a725a1916fd064f01eb3be9a5f487095",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "nix-fast-build",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-formatter-pack": {
|
"nix-formatter-pack": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -544,11 +690,32 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nix-github-actions": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"lix-eval-jobs",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731952509,
|
||||||
|
"narHash": "sha256-p4gB3Rhw8R6Ak4eMl8pqjCPOLCZRqaehZxdZ/mbFClM=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-github-actions",
|
||||||
|
"rev": "7b5f051df789b6b20d259924d349a9ba3319b226",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-github-actions",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-on-droid": {
|
"nix-on-droid": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"home-manager": "home-manager_2",
|
"home-manager": "home-manager_2",
|
||||||
"nix-formatter-pack": "nix-formatter-pack",
|
"nix-formatter-pack": "nix-formatter-pack",
|
||||||
"nixpkgs": "nixpkgs_5",
|
"nixpkgs": "nixpkgs_4",
|
||||||
"nixpkgs-docs": "nixpkgs-docs",
|
"nixpkgs-docs": "nixpkgs-docs",
|
||||||
"nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap",
|
"nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap",
|
||||||
"nmd": "nmd"
|
"nmd": "nmd"
|
||||||
|
@ -567,13 +734,54 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixDarwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_5"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733570843,
|
||||||
|
"narHash": "sha256-sQJAxY1TYWD1UyibN/FnN97paTFuwBw3Vp3DNCyKsMk=",
|
||||||
|
"owner": "LnL7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "a35b08d09efda83625bef267eb24347b446c80b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "LnL7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixThePlanet": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_4",
|
||||||
|
"hercules-ci-effects": "hercules-ci-effects",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"osx-kvm": "osx-kvm"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1734291592,
|
||||||
|
"narHash": "sha256-6jc7RzRLAnoUjgqJizWdOBmYbp49UBpOlqZeDw8SCjc=",
|
||||||
|
"owner": "MatthewCroughan",
|
||||||
|
"repo": "NixThePlanet",
|
||||||
|
"rev": "b70d951ab433806e44a6b366367af55c469da52d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "MatthewCroughan",
|
||||||
|
"repo": "NixThePlanet",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixosHardware": {
|
"nixosHardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745955289,
|
"lastModified": 1734352517,
|
||||||
"narHash": "sha256-mmV2oPhQN+YF2wmnJzXX8tqgYmUYXUj3uUUBSTmYN5o=",
|
"narHash": "sha256-mfv+J/vO4nqmIOlq8Y1rRW8hVsGH3M+I2ESMjhuebDs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "72081c9fbbef63765ae82bff9727ea79cc86bd5b",
|
"rev": "b12e314726a4226298fe82776b4baeaa7bcf3dcd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -584,11 +792,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1745391562,
|
"lastModified": 1703013332,
|
||||||
"narHash": "sha256-sPwcCYuiEopaafePqlG826tBhctuJsLx/mhKKM5Fmjo=",
|
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8a2f738d9d1f1d986b5a4cd2fd2061a7127237d7",
|
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -632,26 +840,41 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743296961,
|
"lastModified": 1733096140,
|
||||||
"narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=",
|
"narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
|
||||||
"owner": "nix-community",
|
"type": "tarball",
|
||||||
"repo": "nixpkgs.lib",
|
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
|
||||||
"rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa",
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-lib_2": {
|
||||||
|
"locked": {
|
||||||
|
"dir": "lib",
|
||||||
|
"lastModified": 1701253981,
|
||||||
|
"narHash": "sha256-ztaDIyZ7HrTAfEEUt9AtTDNoCYxUdSd6NrRHaYOIxtk=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e92039b55bcd58469325ded85d4f58dd5a4eaf58",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"dir": "lib",
|
||||||
"repo": "nixpkgs.lib",
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746183838,
|
"lastModified": 1734323986,
|
||||||
"narHash": "sha256-kwaaguGkAqTZ1oK0yXeQ3ayYjs8u/W7eEfrFpFfIDFA=",
|
"narHash": "sha256-m/lh6hYMIWDYHCAsn81CDAiXoT3gmxXI9J987W5tZrE=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "bf3287dac860542719fe7554e21e686108716879",
|
"rev": "394571358ce82dff7411395829aa6a3aad45b907",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -661,39 +884,39 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgsSisko": {
|
"nixpkgs-stable_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742288794,
|
"lastModified": 1730741070,
|
||||||
"narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=",
|
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42",
|
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1720386169,
|
||||||
|
"narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "194846768975b7ad2c4988bdb82572c00222c0d7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744463964,
|
|
||||||
"narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_3": {
|
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729850857,
|
"lastModified": 1729850857,
|
||||||
"narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=",
|
"narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=",
|
||||||
|
@ -709,13 +932,13 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746141548,
|
"lastModified": 1734119587,
|
||||||
"narHash": "sha256-IgBWhX7A2oJmZFIrpRuMnw5RAufVnfvOgHWgIdds+hc=",
|
"narHash": "sha256-AKU6qqskl0yf2+JdRdD0cfxX4b9x3KKV5RqA6wijmPM=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f02fddb8acef29a8b32f10a335d44828d7825b78",
|
"rev": "3566ab7246670a43abd2ffa913cc62dad9cdf7d5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -725,7 +948,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1708172716,
|
"lastModified": 1708172716,
|
||||||
"narHash": "sha256-3M94oln0b61m3dUmLyECCA9hYAHXZEszM4saE3CmQO4=",
|
"narHash": "sha256-3M94oln0b61m3dUmLyECCA9hYAHXZEszM4saE3CmQO4=",
|
||||||
|
@ -740,13 +963,27 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746141548,
|
"lastModified": 1718149104,
|
||||||
"narHash": "sha256-IgBWhX7A2oJmZFIrpRuMnw5RAufVnfvOgHWgIdds+hc=",
|
"narHash": "sha256-Ds1QpobBX2yoUDx9ZruqVGJ/uQPgcXoYuobBguyKEh8=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f02fddb8acef29a8b32f10a335d44828d7825b78",
|
"rev": "e913ae340076bbb73d9f4d3d065c2bca7caafb16",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1697723726,
|
||||||
|
"narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "7c9cc5a6e5d38010801741ac830a3f8fd667a7a0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -757,6 +994,22 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_7": {
|
"nixpkgs_7": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1734424634,
|
||||||
|
"narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_8": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1682134069,
|
"lastModified": 1682134069,
|
||||||
"narHash": "sha256-TnI/ZXSmRxQDt2sjRYK/8j8iha4B4zP2cnQCZZ3vp7k=",
|
"narHash": "sha256-TnI/ZXSmRxQDt2sjRYK/8j8iha4B4zP2cnQCZZ3vp7k=",
|
||||||
|
@ -808,6 +1061,22 @@
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"osx-kvm": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701316418,
|
||||||
|
"narHash": "sha256-Sk8LYhFovoMX1ln7DWYArJQphW2a4h8Xg7/ZEZXwZv4=",
|
||||||
|
"owner": "kholia",
|
||||||
|
"repo": "OSX-KVM",
|
||||||
|
"rev": "09daff670a7eb9ff616073df329586c5995623a9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kholia",
|
||||||
|
"repo": "OSX-KVM",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"pre-commit-hooks-nix": {
|
"pre-commit-hooks-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [
|
||||||
|
@ -818,14 +1087,15 @@
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"lanzaboote",
|
"lanzaboote",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1741379162,
|
"lastModified": 1730302582,
|
||||||
"narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=",
|
"narHash": "sha256-W1MIJpADXQCgosJZT8qBYLRuZls2KSiKdpnTVdKBuvU=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "pre-commit-hooks.nix",
|
"repo": "pre-commit-hooks.nix",
|
||||||
"rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc",
|
"rev": "af8a16fe5c264f5e9e18bcee2859b40a656876cf",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -888,13 +1158,16 @@
|
||||||
"impermanence": "impermanence",
|
"impermanence": "impermanence",
|
||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
"lix": "lix",
|
"lix": "lix",
|
||||||
|
"lix-eval-jobs": "lix-eval-jobs",
|
||||||
"lix-module": "lix-module",
|
"lix-module": "lix-module",
|
||||||
"mobile-nixos": "mobile-nixos",
|
"mobile-nixos": "mobile-nixos",
|
||||||
|
"nix-fast-build": "nix-fast-build",
|
||||||
"nix-on-droid": "nix-on-droid",
|
"nix-on-droid": "nix-on-droid",
|
||||||
|
"nixDarwin": "nixDarwin",
|
||||||
|
"nixThePlanet": "nixThePlanet",
|
||||||
"nixosHardware": "nixosHardware",
|
"nixosHardware": "nixosHardware",
|
||||||
"nixpkgs": "nixpkgs_6",
|
"nixpkgs": "nixpkgs_7",
|
||||||
"nixpkgsSisko": "nixpkgsSisko",
|
"treefmt-nix": "treefmt-nix_3",
|
||||||
"treefmt-nix": "treefmt-nix",
|
|
||||||
"vscode-server": "vscode-server"
|
"vscode-server": "vscode-server"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -906,11 +1179,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1741573199,
|
"lastModified": 1730601085,
|
||||||
"narHash": "sha256-A2sln1GdCf+uZ8yrERSCZUCqZ3JUlOv1WE2VFqqfaLQ=",
|
"narHash": "sha256-Sgax33jGuvVHTjl1P78IwzlhAGyOxtx5Q26inKja8S4=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "c777dc8a1e35407b0e80ec89817fe69970f4e81a",
|
"rev": "8d1b40f8dfd7539aaa3de56e207e22b3cc451825",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1005,15 +1278,57 @@
|
||||||
"treefmt-nix": {
|
"treefmt-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"lix-eval-jobs",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746216483,
|
"lastModified": 1732292307,
|
||||||
"narHash": "sha256-4h3s1L/kKqt3gMDcVfN8/4v2jqHrgLIe4qok4ApH5x4=",
|
"narHash": "sha256-5WSng844vXt8uytT5djmqBCkopyle6ciFgteuA9bJpw=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"rev": "29ec5026372e0dec56f890e50dbe4f45930320fd",
|
"rev": "705df92694af7093dfbb27109ce16d828a79155f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nix-fast-build",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1732894027,
|
||||||
|
"narHash": "sha256-2qbdorpq0TXHBWbVXaTqKoikN4bqAtAplTwGuII+oAc=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "6209c381904cab55796c5d7350e89681d3b2a8ef",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix_3": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733761991,
|
||||||
|
"narHash": "sha256-s4DalCDepD22jtKL5Nw6f4LP5UwoMcPzPZgHWjAfqbQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "0ce9d149d99bc383d1f2d85f31f6ebd146e46085",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1025,7 +1340,7 @@
|
||||||
"vscode-server": {
|
"vscode-server": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-utils": "flake-utils_2",
|
||||||
"nixpkgs": "nixpkgs_7"
|
"nixpkgs": "nixpkgs_8"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729422940,
|
"lastModified": 1729422940,
|
||||||
|
|
17
flake.nix
17
flake.nix
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
flakeParts.url = "github:hercules-ci/flake-parts";
|
flakeParts.url = "github:hercules-ci/flake-parts";
|
||||||
nixpkgsSisko.url = "github:NixOS/nixpkgs/b6eaf97c6960d97350c584de1b6dcff03c9daf42";
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixosHardware.url = "github:NixOS/nixos-hardware";
|
nixosHardware.url = "github:NixOS/nixos-hardware";
|
||||||
homeManager = {
|
homeManager = {
|
||||||
|
@ -29,6 +28,13 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
dream2nix.url = "github:nix-community/dream2nix";
|
dream2nix.url = "github:nix-community/dream2nix";
|
||||||
|
nixThePlanet = {
|
||||||
|
url = "github:MatthewCroughan/NixThePlanet/";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nixDarwin = {
|
||||||
|
url = "github:LnL7/nix-darwin";
|
||||||
|
};
|
||||||
nix-on-droid.url = "github:nix-community/nix-on-droid";
|
nix-on-droid.url = "github:nix-community/nix-on-droid";
|
||||||
lix = {
|
lix = {
|
||||||
url = "git+https://git@git.lix.systems/lix-project/lix"; # FIXME update
|
url = "git+https://git@git.lix.systems/lix-project/lix"; # FIXME update
|
||||||
|
@ -39,6 +45,11 @@
|
||||||
inputs.lix.follows = "lix";
|
inputs.lix.follows = "lix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
lix-eval-jobs = {
|
||||||
|
url = "git+https://git.lix.systems/lix-project/nix-eval-jobs";
|
||||||
|
inputs.lix.follows = "lix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
mobile-nixos = {
|
mobile-nixos = {
|
||||||
url = "github:NixOS/mobile-nixos";
|
url = "github:NixOS/mobile-nixos";
|
||||||
flake = false;
|
flake = false;
|
||||||
|
@ -51,6 +62,10 @@
|
||||||
};
|
};
|
||||||
catppuccin.url = "github:catppuccin/nix";
|
catppuccin.url = "github:catppuccin/nix";
|
||||||
emacs-overlay.url = "github:nix-community/emacs-overlay";
|
emacs-overlay.url = "github:nix-community/emacs-overlay";
|
||||||
|
nix-fast-build = {
|
||||||
|
url = "github:Mic92/nix-fast-build";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
in
|
||||||
|
# nixpkgs = builtins.getFlake "github:NixOS/nixpkgs/932fc16b263f26803d3960e4400bc13dde84a972";
|
||||||
|
# chirp = nixpkgs.legacyPackages.${pkgs.system}.chirp;
|
||||||
{
|
{
|
||||||
home.packages = [ pkgs.chirp ];
|
home.packages = [ pkgs.chirp ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,31 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [
|
||||||
pkgs.cura-appimage
|
(
|
||||||
|
let
|
||||||
|
cura5 = pkgs.appimageTools.wrapType2 rec {
|
||||||
|
pname = "cura5";
|
||||||
|
version = "5.8.0";
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = "https://github.com/Ultimaker/Cura/releases/download/${version}/UltiMaker-Cura-${version}-linux-X64.AppImage";
|
||||||
|
hash = "sha256-EojVAe+o43W80ES5BY3QgGRTxztwS+B6kIOfJOtULOg=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.writeScriptBin "cura" ''
|
||||||
|
#! ${pkgs.bash}/bin/bash
|
||||||
|
# AppImage version of Cura loses current working directory and treats all paths relateive to $HOME.
|
||||||
|
# So we convert each of the files passed as argument to an absolute path.
|
||||||
|
# This fixes use cases like `cd /path/to/my/files; cura mymodel.stl anothermodel.stl`.
|
||||||
|
args=()
|
||||||
|
for a in "$@"; do
|
||||||
|
if [ -e "$a" ]; then
|
||||||
|
a="$(realpath "$a")"
|
||||||
|
fi
|
||||||
|
args+=("$a")
|
||||||
|
done
|
||||||
|
QT_QPA_PLATFORM=xcb exec "${cura5}/bin/cura5" "''${args[@]}"
|
||||||
|
''
|
||||||
|
)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [ pkgs.discord ];
|
||||||
(pkgs.discord.override {
|
|
||||||
withOpenASAR = true;
|
|
||||||
withVencord = true;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
home.file.".config/discord/settings.json".text = builtins.toJSON {
|
home.file.".config/discord/settings.json".text = builtins.toJSON {
|
||||||
SKIP_HOST_UPDATE = true;
|
SKIP_HOST_UPDATE = true;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ pkgs, lib, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [ pkgs.element-desktop ];
|
# home.packages = [pkgs.schildichat-desktop];
|
||||||
|
home.packages = [ pkgs.element-desktop-wayland ];
|
||||||
|
|
||||||
systemd.user.services.element-desktop = {
|
systemd.user.services.element-desktop = {
|
||||||
Install.WantedBy = [ "graphical-session.target" ];
|
Install.WantedBy = [ "graphical-session.target" ];
|
||||||
|
@ -11,7 +12,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
Service = {
|
Service = {
|
||||||
ExecStart = lib.getExe pkgs.element-desktop;
|
# ExecStart = "${pkgs.schildichat-desktop}/bin/schildichat-desktop"; # TODO I preferred SchildiChat but it was removed from nixpkgs becuase unsafe
|
||||||
|
ExecStart = "${pkgs.element-desktop-wayland}/bin/element-desktop";
|
||||||
Restart = "on-failure";
|
Restart = "on-failure";
|
||||||
RestartSec = 3;
|
RestartSec = 3;
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,20 +46,28 @@ in
|
||||||
nodejs_20
|
nodejs_20
|
||||||
qadwaitadecorations
|
qadwaitadecorations
|
||||||
kdePackages.qtwayland
|
kdePackages.qtwayland
|
||||||
copilot-language-server.fhs
|
|
||||||
math-preview
|
|
||||||
emacs-lsp-booster
|
|
||||||
]
|
]
|
||||||
++ (with hunspellDicts; [
|
++ (with hunspellDicts; [
|
||||||
en_US-large
|
en_US-large
|
||||||
it_IT
|
it_IT
|
||||||
]);
|
]);
|
||||||
home.activation.linkEmacsConfig = lib.hm.dag.entryAnywhere ''
|
home.activation.cloneCcrEmacsFlake =
|
||||||
if [ ! -d "$HOME/.config/emacs" ]; then
|
let
|
||||||
$DRY_RUN_CMD mkdir "$HOME/.config/emacs"
|
path = lib.makeBinPath (
|
||||||
$DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/emacs/init.el" "$HOME/.config/emacs/init.el"
|
with pkgs;
|
||||||
$DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs"
|
[
|
||||||
fi
|
git
|
||||||
$DRY_RUN_CMD ln -sfn ${treesitGrammars} "$HOME/.config/emacs/tree-sitter"
|
openssh
|
||||||
'';
|
]
|
||||||
|
);
|
||||||
|
in
|
||||||
|
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
PATH=$PATH:${path}
|
||||||
|
if [ ! -d "$HOME/.config/emacs" ]; then
|
||||||
|
mkdir "$HOME/.config/emacs"
|
||||||
|
$DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/emacs/init.el" "$HOME/.config/emacs/init.el"
|
||||||
|
$DRY_RUN_CMD ln -s "$HOME/.config/emacs" "$HOME/emacs"
|
||||||
|
fi
|
||||||
|
$DRY_RUN_CMD ln -sfn ${treesitGrammars} "$HOME/.config/emacs/tree-sitter"
|
||||||
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,14 +37,10 @@
|
||||||
(consult-eglot-embark-mode)
|
(consult-eglot-embark-mode)
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package eglot-booster
|
|
||||||
:after eglot
|
|
||||||
:config (eglot-booster-mode))
|
|
||||||
|
|
||||||
(use-package emacs
|
(use-package emacs
|
||||||
:bind (("<mouse-4>" . scroll-down-line)
|
:bind (("<mouse-4>" . scroll-down-line)
|
||||||
("<mouse-5>" . scroll-up-line)
|
("<mouse-5>" . scroll-up-line)
|
||||||
(("C-x F" . recentf-open)))
|
(("C-x F" . recentf-open)))
|
||||||
:hook (server-after-make-frame . (lambda () (xterm-mouse-mode +1))) ;; FIXME why is this needed?
|
:hook (server-after-make-frame . (lambda () (xterm-mouse-mode +1))) ;; FIXME why is this needed?
|
||||||
:custom
|
:custom
|
||||||
(use-dialog-box nil)
|
(use-dialog-box nil)
|
||||||
|
@ -52,6 +48,8 @@
|
||||||
(native-comp-async-report-warnings-errors nil)
|
(native-comp-async-report-warnings-errors nil)
|
||||||
(inhibit-startup-message t)
|
(inhibit-startup-message t)
|
||||||
(visible-bell t)
|
(visible-bell t)
|
||||||
|
(scroll-conservatively 101) ;; more than 100 => redisplay doesn't recenter point)
|
||||||
|
(scroll-margin 3)
|
||||||
(temporary-file-directory "~/.emacs-saves/")
|
(temporary-file-directory "~/.emacs-saves/")
|
||||||
(backup-directory-alist `(("." . ,temporary-file-directory)))
|
(backup-directory-alist `(("." . ,temporary-file-directory)))
|
||||||
(auto-save-files-name-transforms `((".*" ,temporary-file-directory t)))
|
(auto-save-files-name-transforms `((".*" ,temporary-file-directory t)))
|
||||||
|
@ -60,9 +58,6 @@
|
||||||
(mouse-autoselect-window t)
|
(mouse-autoselect-window t)
|
||||||
(treesit-font-lock-level 4)
|
(treesit-font-lock-level 4)
|
||||||
(custom-file "~/.config/emacs/custom.el")
|
(custom-file "~/.config/emacs/custom.el")
|
||||||
(frame-title-format "%b - Emacs")
|
|
||||||
(indent-tabs-mode nil)
|
|
||||||
(tab-width 4)
|
|
||||||
:config
|
:config
|
||||||
(set-face-background 'vertical-border (face-background 'default))
|
(set-face-background 'vertical-border (face-background 'default))
|
||||||
(set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?┃))
|
(set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?┃))
|
||||||
|
@ -85,17 +80,10 @@
|
||||||
(defun ccr/nixos-rebuild ()
|
(defun ccr/nixos-rebuild ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((operation (completing-read "nixos-rebuild " '("switch" "boot" "test" "dry-activate")))
|
(let* ((operation (completing-read "nixos-rebuild " '("switch" "boot" "test" "dry-activate")))
|
||||||
(buffer-name (format "nixos-rebuild-%s" operation)))
|
(buffer-name (format "nixos-rebuild-%s" operation)))
|
||||||
(async-shell-command (format "sudo nixos-rebuild --flake fleet %s -L" operation) buffer-name)))
|
(async-shell-command (format "sudo nixos-rebuild --flake fleet %s -L" operation) buffer-name)))
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package ultra-scroll
|
|
||||||
:init
|
|
||||||
(setq scroll-conservatively 101 ; important!
|
|
||||||
scroll-margin 0)
|
|
||||||
:config
|
|
||||||
(ultra-scroll-mode 1))
|
|
||||||
|
|
||||||
(use-package doc-view
|
(use-package doc-view
|
||||||
:custom
|
:custom
|
||||||
(doc-view-scale-internally nil)
|
(doc-view-scale-internally nil)
|
||||||
|
@ -147,12 +135,6 @@
|
||||||
(add-hook 'next-error-hook #'pulsar-pulse-line)
|
(add-hook 'next-error-hook #'pulsar-pulse-line)
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package visual-replace
|
|
||||||
:defer t
|
|
||||||
:bind (("C-c r" . visual-replace)
|
|
||||||
:map isearch-mode-map
|
|
||||||
("C-c r" . visual-replace-from-isearch)))
|
|
||||||
|
|
||||||
(use-package clipetty
|
(use-package clipetty
|
||||||
:delight
|
:delight
|
||||||
:hook (after-init . global-clipetty-mode))
|
:hook (after-init . global-clipetty-mode))
|
||||||
|
@ -189,13 +171,6 @@
|
||||||
(indent-bars-prefer-character 't) ;; so it works also in terminal
|
(indent-bars-prefer-character 't) ;; so it works also in terminal
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package copilot
|
|
||||||
:custom
|
|
||||||
(copilot-max-char -1)
|
|
||||||
(copilot-indent-offset-warning-disable 't)
|
|
||||||
:hook (prog-mode org-mode)
|
|
||||||
:bind (("C-<tab>" . copilot-accept-completion)))
|
|
||||||
|
|
||||||
(use-package diredfl
|
(use-package diredfl
|
||||||
:config (diredfl-global-mode))
|
:config (diredfl-global-mode))
|
||||||
|
|
||||||
|
@ -216,8 +191,6 @@
|
||||||
:custom
|
:custom
|
||||||
(meow-use-clipboard 't)
|
(meow-use-clipboard 't)
|
||||||
:config
|
:config
|
||||||
(require 'meow-tree-sitter)
|
|
||||||
(meow-tree-sitter-register-defaults)
|
|
||||||
(add-hook 'after-make-frame-functions (defun ccr/meow--prepare-face (_)
|
(add-hook 'after-make-frame-functions (defun ccr/meow--prepare-face (_)
|
||||||
(meow--prepare-face)
|
(meow--prepare-face)
|
||||||
(remove-hook 'after-make-frame-functions 'ccr/meow--prepare-face)))
|
(remove-hook 'after-make-frame-functions 'ccr/meow--prepare-face)))
|
||||||
|
@ -380,9 +353,7 @@
|
||||||
(vertico-mode t)
|
(vertico-mode t)
|
||||||
:bind (:map vertico-map
|
:bind (:map vertico-map
|
||||||
(("DEL" . vertico-directory-delete-char)
|
(("DEL" . vertico-directory-delete-char)
|
||||||
("C-DEL" . vertico-directory-delete-word)
|
("C-DEL" . vertico-directory-delete-word))))
|
||||||
("M-q" . vertico-quick-insert)
|
|
||||||
("C-q" . vertico-quick-exit))))
|
|
||||||
|
|
||||||
;; (use-package vertico-posframe
|
;; (use-package vertico-posframe
|
||||||
;; :after vertico
|
;; :after vertico
|
||||||
|
@ -472,10 +443,11 @@
|
||||||
(use-package magit-delta
|
(use-package magit-delta
|
||||||
:hook (magit-mode . magit-delta-mode))
|
:hook (magit-mode . magit-delta-mode))
|
||||||
|
|
||||||
(use-package magit-todos
|
;; FIXME
|
||||||
:after magit
|
;; (use-package magit-todos
|
||||||
:custom (magit-todos-keyword-suffix "\\(?:([^)]+)\\)?:?")
|
;; :after magit
|
||||||
:config (magit-todos-mode 1))
|
;; :custom (magit-todos-keyword-suffix "\\(?:([^)]+)\\)?:?")
|
||||||
|
;; :config (magit-todos-mode 1))
|
||||||
|
|
||||||
(use-package difftastic
|
(use-package difftastic
|
||||||
:demand t
|
:demand t
|
||||||
|
@ -528,9 +500,6 @@
|
||||||
(use-package dockerfile-ts-mode
|
(use-package dockerfile-ts-mode
|
||||||
:mode "Dockerfile\\'")
|
:mode "Dockerfile\\'")
|
||||||
|
|
||||||
(use-package lean4-mode
|
|
||||||
:mode "\\.lean\\'")
|
|
||||||
|
|
||||||
(use-package python-ts-mode
|
(use-package python-ts-mode
|
||||||
:hook ((python-ts-mode . (lambda ()
|
:hook ((python-ts-mode . (lambda ()
|
||||||
(require 'eglot)
|
(require 'eglot)
|
||||||
|
@ -539,43 +508,24 @@
|
||||||
(eglot-ensure))))
|
(eglot-ensure))))
|
||||||
:mode "\\.py\\'")
|
:mode "\\.py\\'")
|
||||||
|
|
||||||
(use-package solidity-mode
|
|
||||||
:hook ((solidity-mode . (lambda ()
|
|
||||||
(require 'eglot)
|
|
||||||
(add-to-list 'eglot-server-programs
|
|
||||||
'(solidity-mode . ("nomicfoundation-solidity-language-server" "--stdio")))
|
|
||||||
(eglot-ensure))))
|
|
||||||
:mode "\\.sol\\'")
|
|
||||||
|
|
||||||
|
|
||||||
(use-package typescript-ts-mode
|
(use-package typescript-ts-mode
|
||||||
:hook ((typescript-ts-mode . (lambda ()
|
:hook ((typescript-ts-mode . (lambda ()
|
||||||
(require 'eglot)
|
(require 'eglot)
|
||||||
(eglot-ensure))))
|
(eglot-ensure))))
|
||||||
:mode "\\.ts\\'")
|
:mode "\\.ts\\'")
|
||||||
|
|
||||||
(use-package rust-mode
|
|
||||||
:init
|
|
||||||
(setq rust-mode-treesitter-derive t)
|
|
||||||
:hook ((rust-mode . (lambda ()
|
|
||||||
(require 'eglot)
|
|
||||||
(eglot-ensure)))))
|
|
||||||
|
|
||||||
(use-package haskell-ts-mode
|
(use-package haskell-ts-mode
|
||||||
:hook ((haskell--ts-mode . eglot-ensure))
|
:hook ((haskell--ts-mode . eglot-ensure))
|
||||||
:mode "\\.hs\\'"
|
:mode "\\.hs\\'"
|
||||||
:config
|
:config
|
||||||
(add-to-list 'eglot-server-programs
|
(add-to-list 'eglot-server-programs
|
||||||
'(haskell-ts-mode . ("haskell-language-server" "--lsp"))))
|
'(haskell-ts-mode . ("haskell-language-server-wrapper" "--lsp"))))
|
||||||
|
|
||||||
(use-package tidal
|
|
||||||
:custom ((tidal-interpreter "tidal")))
|
|
||||||
|
|
||||||
(use-package purescript-mode
|
(use-package purescript-mode
|
||||||
:custom ((project-vc-extra-root-markers '("spago.dhall")))
|
:custom ((project-vc-extra-root-markers '("spago.dhall")))
|
||||||
:hook ((purescript-mode . eglot-ensure)
|
:hook ((purescript-mode . eglot-ensure)
|
||||||
(purescript-mode . turn-on-purescript-indentation)
|
(purescript-mode . turn-on-purescript-indentation)
|
||||||
(purescript-mode . (lambda () (setq project-vc-extra-root-markers '("spago.dhall"))))))
|
(purescript-mode . (lambda () (setq project-vc-extra-root-markers '("spago.dhall"))))))
|
||||||
|
|
||||||
(use-package terraform-mode
|
(use-package terraform-mode
|
||||||
:after eglot
|
:after eglot
|
||||||
|
@ -593,21 +543,9 @@
|
||||||
(use-package sh-mode
|
(use-package sh-mode
|
||||||
:hook (sh-mode . bash-ts-mode))
|
:hook (sh-mode . bash-ts-mode))
|
||||||
|
|
||||||
(use-package kdl-ts-mode
|
|
||||||
:mode "\\.kdl\\'")
|
|
||||||
|
|
||||||
(use-package gptscript-mode
|
(use-package gptscript-mode
|
||||||
:mode "\\.gpt\\'")
|
:mode "\\.gpt\\'")
|
||||||
|
|
||||||
(use-package gptscript-mode
|
|
||||||
:mode "\\.gpt\\'")
|
|
||||||
|
|
||||||
(use-package typst-ts-mode
|
|
||||||
:config
|
|
||||||
(add-to-list 'eglot-server-programs
|
|
||||||
'(typst-ts-mode . ("tinymist" "lsp")))
|
|
||||||
:mode "\\.typ\\'")
|
|
||||||
|
|
||||||
;; FIXME
|
;; FIXME
|
||||||
;; (use-package mmm-mode
|
;; (use-package mmm-mode
|
||||||
;; :config
|
;; :config
|
||||||
|
@ -625,7 +563,7 @@
|
||||||
(use-package paredit
|
(use-package paredit
|
||||||
:delight
|
:delight
|
||||||
:hook ((lisp-mode . enable-paredit-mode)
|
:hook ((lisp-mode . enable-paredit-mode)
|
||||||
(emacs-lisp-mode . enable-paredit-mode)))
|
(emacs-lisp-mode . enable-paredit-mode)))
|
||||||
|
|
||||||
(use-package aggressive-indent
|
(use-package aggressive-indent
|
||||||
:hook ((lisp-mode . aggressive-indent-mode)
|
:hook ((lisp-mode . aggressive-indent-mode)
|
||||||
|
@ -668,6 +606,7 @@
|
||||||
(add-to-list 'eat-semi-char-non-bound-keys '[?\e 108]) ; M-l
|
(add-to-list 'eat-semi-char-non-bound-keys '[?\e 108]) ; M-l
|
||||||
(eat-update-semi-char-mode-map)
|
(eat-update-semi-char-mode-map)
|
||||||
(eat-reload)
|
(eat-reload)
|
||||||
|
:hook (eat-mode . (lambda () (setq-local scroll-margin 0)))
|
||||||
:bind (("C-c o t" . eat-project))
|
:bind (("C-c o t" . eat-project))
|
||||||
;; FIXME doesn't work well
|
;; FIXME doesn't work well
|
||||||
;; ((eat-mode . compilation-shell-minor-mode))
|
;; ((eat-mode . compilation-shell-minor-mode))
|
||||||
|
@ -679,8 +618,7 @@
|
||||||
(eat-eshell-mode)
|
(eat-eshell-mode)
|
||||||
(eat-eshell-visual-command-mode)
|
(eat-eshell-visual-command-mode)
|
||||||
:custom ((eshell-prefer-lisp-functions t)
|
:custom ((eshell-prefer-lisp-functions t)
|
||||||
(eshell-history-size 10000)
|
(eshell-history-size 10000))
|
||||||
(eshell-banner-message ""))
|
|
||||||
:config
|
:config
|
||||||
(defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval
|
(defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval
|
||||||
(eshell 'N)
|
(eshell 'N)
|
||||||
|
@ -706,48 +644,20 @@
|
||||||
(defalias (car alias) (cdr alias)))
|
(defalias (car alias) (cdr alias)))
|
||||||
ccr/eshell-aliases)
|
ccr/eshell-aliases)
|
||||||
|
|
||||||
|
:hook (eshell-mode . (lambda () (setq-local scroll-margin 0)))
|
||||||
(defun ccr/eshell-get-current-input ()
|
|
||||||
"Restituisce l'input corrente dell'utente nella riga Eshell."
|
|
||||||
(when (eq major-mode 'eshell-mode)
|
|
||||||
(let ((start (save-excursion (eshell-bol) (point)))
|
|
||||||
(end (point-at-eol)))
|
|
||||||
(buffer-substring-no-properties start end))))
|
|
||||||
|
|
||||||
(defun ccr/eshell-replace-current-input (new-input)
|
|
||||||
(when (eq major-mode 'eshell-mode)
|
|
||||||
(let ((inhibit-read-only t))
|
|
||||||
(eshell-bol)
|
|
||||||
(delete-region (point) (point-at-eol))
|
|
||||||
(insert new-input)
|
|
||||||
(end-of-line))))
|
|
||||||
|
|
||||||
(defun ccr/eshell-history ()
|
|
||||||
(interactive)
|
|
||||||
(when (eq major-mode 'eshell-mode)
|
|
||||||
(let* ((current-input (ccr/eshell-get-current-input))
|
|
||||||
(eshell-history (when (and eshell-history-file-name
|
|
||||||
(file-readable-p eshell-history-file-name))
|
|
||||||
(f-read-text eshell-history-file-name)))
|
|
||||||
(bash-history (when (file-readable-p "~/.bash_history")
|
|
||||||
(f-read-text "~/.bash_history")))
|
|
||||||
(history (split-string (concat (or eshell-history "") "\n"
|
|
||||||
(or bash-history "")) "\n" t))
|
|
||||||
(selection (completing-read "History: " history nil t current-input)))
|
|
||||||
(ccr/eshell-replace-current-input selection))))
|
|
||||||
|
|
||||||
:bind (("C-c o e" . project-eshell)
|
:bind (("C-c o e" . project-eshell)
|
||||||
(:map eshell-mode-map
|
:map eshell-mode-map
|
||||||
("C-r" . ccr/eshell-history)
|
("C-r" . eshell-atuin-history))) ;; i.e. just C-r in semi-char-mode
|
||||||
("C-<return>" . corfu-send)
|
|
||||||
))) ;; i.e. just C-r in semi-char-mode
|
|
||||||
|
|
||||||
(use-package eshell-command-not-found
|
(use-package eshell-command-not-found
|
||||||
:custom ((eshell-command-not-found-command "command-not-found"))
|
:custom ((eshell-command-not-found-command "command-not-found"))
|
||||||
:hook ((eshell-mode . eshell-command-not-found-mode)))
|
:hook ((eshell-mode . eshell-command-not-found-mode)))
|
||||||
|
|
||||||
;; (use-package eshell-atuin
|
(use-package eshell-atuin
|
||||||
;; :hook ((eshell-mode . eshell-atuin-mode)))
|
:hook ((eshell-mode . eshell-atuin-mode)))
|
||||||
|
|
||||||
|
(use-package fish-completion-mode
|
||||||
|
:hook ((eshell-mode . fish-completion-mode)))
|
||||||
|
|
||||||
(use-package eshell-syntax-highlighting
|
(use-package eshell-syntax-highlighting
|
||||||
:custom
|
:custom
|
||||||
|
@ -788,7 +698,7 @@
|
||||||
:hook ((org-mode . variable-pitch-mode)
|
:hook ((org-mode . variable-pitch-mode)
|
||||||
(org-mode . visual-line-mode)
|
(org-mode . visual-line-mode)
|
||||||
(org-mode . visual-fill-column-mode))
|
(org-mode . visual-fill-column-mode))
|
||||||
:custom ((org-log-done nil)
|
:custom ((org-log-done 'time)
|
||||||
(org-return-follows-link t)
|
(org-return-follows-link t)
|
||||||
(org-hide-emphasis-markers t)
|
(org-hide-emphasis-markers t)
|
||||||
(visual-fill-column-center-text t)
|
(visual-fill-column-center-text t)
|
||||||
|
@ -813,6 +723,7 @@
|
||||||
(org-ellipsis "…")
|
(org-ellipsis "…")
|
||||||
)
|
)
|
||||||
:bind (("C-c o l" . org-store-link)
|
:bind (("C-c o l" . org-store-link)
|
||||||
|
("C-c o a" . org-agenda)
|
||||||
("C-c o c" . org-capture)
|
("C-c o c" . org-capture)
|
||||||
("C-c b o" . org-switchb))
|
("C-c b o" . org-switchb))
|
||||||
:config
|
:config
|
||||||
|
@ -841,7 +752,6 @@ This is meant to be an helper to be called from the window manager."
|
||||||
(add-hook 'org-attach-after-change-hook #'ccr/org-attach-save-file-list-to-property))
|
(add-hook 'org-attach-after-change-hook #'ccr/org-attach-save-file-list-to-property))
|
||||||
|
|
||||||
(use-package org-agenda
|
(use-package org-agenda
|
||||||
:after org-super-agenda
|
|
||||||
:custom
|
:custom
|
||||||
(org-agenda-files '("~/org"))
|
(org-agenda-files '("~/org"))
|
||||||
(org-agenda-tags-column 0)
|
(org-agenda-tags-column 0)
|
||||||
|
@ -852,51 +762,7 @@ This is meant to be an helper to be called from the window manager."
|
||||||
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
" ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄"))
|
||||||
(org-agenda-current-time-string
|
(org-agenda-current-time-string
|
||||||
"◀── now ─────────────────────────────────────────────────")
|
"◀── now ─────────────────────────────────────────────────")
|
||||||
(org-super-agenda-groups
|
:bind (("C-c o a" . org-agenda)))
|
||||||
'(;; Each group has an implicit boolean OR operator between its selectors.
|
|
||||||
(:name "Today" ; Optionally specify section name
|
|
||||||
:time-grid t ; Items that appear on the time grid
|
|
||||||
:todo "TODAY") ; Items that have this TODO keyword
|
|
||||||
(:name "Important"
|
|
||||||
;; Single arguments given alone
|
|
||||||
:tag "bills"
|
|
||||||
:priority "A")
|
|
||||||
;; Set order of multiple groups at once
|
|
||||||
(:order-multi (2 (:name "Shopping in town"
|
|
||||||
;; Boolean AND group matches items that match all subgroups
|
|
||||||
:and (:tag "shopping" :tag "@town"))
|
|
||||||
(:name "Food-related"
|
|
||||||
;; Multiple args given in list with implicit OR
|
|
||||||
:tag ("food" "dinner"))
|
|
||||||
(:name "Personal"
|
|
||||||
:habit t
|
|
||||||
:tag "personal")
|
|
||||||
(:name "Space-related (non-moon-or-planet-related)"
|
|
||||||
;; Regexps match case-insensitively on the entire entry
|
|
||||||
:and (:regexp ("space" "NASA")
|
|
||||||
;; Boolean NOT also has implicit OR between selectors
|
|
||||||
:not (:regexp "moon" :tag "planet")))))
|
|
||||||
;; Groups supply their own section names when none are given
|
|
||||||
(:todo "WAITING" :order 8) ; Set order of this section
|
|
||||||
(:todo ("SOMEDAY" "TO-READ" "CHECK" "TO-WATCH" "WATCHING")
|
|
||||||
;; Show this group at the end of the agenda (since it has the
|
|
||||||
;; highest number). If you specified this group last, items
|
|
||||||
;; with these todo keywords that e.g. have priority A would be
|
|
||||||
;; displayed in that group instead, because items are grouped
|
|
||||||
;; out in the order the groups are listed.
|
|
||||||
:order 9)
|
|
||||||
(:priority<= "B"
|
|
||||||
;; Show this section after "Today" and "Important", because
|
|
||||||
;; their order is unspecified, defaulting to 0. Sections
|
|
||||||
;; are displayed lowest-number-first.
|
|
||||||
:order 1)
|
|
||||||
;; After the last group, the agenda will display items that didn't
|
|
||||||
;; match any of these groups, with the default order position of 99
|
|
||||||
))
|
|
||||||
:bind (("C-c o a" . org-agenda))
|
|
||||||
:config
|
|
||||||
(org-super-agenda-mode)
|
|
||||||
)
|
|
||||||
|
|
||||||
(use-package org-modern
|
(use-package org-modern
|
||||||
:after org
|
:after org
|
||||||
|
@ -1029,193 +895,46 @@ This is meant to be an helper to be called from the window manager."
|
||||||
|
|
||||||
(use-package gptel
|
(use-package gptel
|
||||||
:custom
|
:custom
|
||||||
(gptel-model 'google/gemini-2.5-flash-preview)
|
(gptel-api-key (lambda () (require 'f) (f-read-text (getenv "OPENAI_API_KEY_PATH"))))
|
||||||
(gptel-backend (gptel-make-openai "OpenRouter"
|
(gptel-model 'gpt-4o)
|
||||||
:host "openrouter.ai"
|
|
||||||
:endpoint "/api/v1/chat/completions"
|
|
||||||
:key (lambda () (require 'f) (f-read-text (getenv "OPENAI_API_KEY_PATH")))
|
|
||||||
:stream t
|
|
||||||
:models '(google/gemini-2.5-flash-preview))
|
|
||||||
)
|
|
||||||
(gptel-default-mode 'org-mode)
|
(gptel-default-mode 'org-mode)
|
||||||
(gptel-org-branching-context nil) ;; this is cool but I don't feel comfortable with it
|
(gptel-org-branching-context nil) ;; this is cool but I don't feel comfortable with it
|
||||||
(gptel-use-tools 't)
|
|
||||||
|
|
||||||
:bind
|
|
||||||
("C-c a a" . gptel-add)
|
|
||||||
("C-c a f" . gptel-add-file)
|
|
||||||
("C-c a r" . gptel-context-remove-all)
|
|
||||||
("C-c a " . gptel-menu)
|
|
||||||
|
|
||||||
|
|
||||||
:config
|
:config
|
||||||
(require 'gptel-curl)
|
(require 'gptel-curl)
|
||||||
|
|
||||||
;; (add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
(add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
||||||
;; (add-hook 'gptel-post-stream-hook 'gptel-auto-scroll)
|
(add-hook 'gptel-post-stream-hook 'gptel-auto-scroll)
|
||||||
|
|
||||||
(defun ccr/edit-buffer (buffer-name old-string new-string)
|
|
||||||
"In BUFFER-NAME, replace OLD-STRING with NEW-STRING."
|
|
||||||
(with-current-buffer buffer-name
|
|
||||||
(let ((case-fold-search nil)) ;; Case-sensitive search
|
|
||||||
(save-excursion
|
|
||||||
(goto-char (point-min))
|
|
||||||
(let ((count 0))
|
|
||||||
(while (search-forward old-string nil t)
|
|
||||||
(setq count (1+ count)))
|
|
||||||
(if (= count 0)
|
|
||||||
(format "Error: Could not find text to replace in buffer %s" buffer-name)
|
|
||||||
(if (> count 1)
|
|
||||||
(format "Error: Found %d matches for the text to replace in buffer %s" count buffer-name)
|
|
||||||
(goto-char (point-min))
|
|
||||||
(search-forward old-string)
|
|
||||||
(replace-match new-string t t)
|
|
||||||
(format "Successfully edited buffer %s" buffer-name))))))))
|
|
||||||
|
|
||||||
(defun ccr/replace-buffer (buffer-name content)
|
|
||||||
"Completely replace contents of BUFFER-NAME with CONTENT."
|
|
||||||
(with-current-buffer buffer-name
|
|
||||||
(erase-buffer)
|
|
||||||
(insert content)
|
|
||||||
(format "Buffer replaced: %s" buffer-name)))
|
|
||||||
|
|
||||||
(setq gptel-tools `(
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda (url)
|
|
||||||
(with-current-buffer (url-retrieve-synchronously url)
|
|
||||||
(goto-char (point-min))
|
|
||||||
(forward-paragraph)
|
|
||||||
(let ((dom (libxml-parse-html-region (point) (point-max))))
|
|
||||||
(run-at-time 0 nil #'kill-buffer (current-buffer))
|
|
||||||
(with-temp-buffer
|
|
||||||
(shr-insert-document dom)
|
|
||||||
(buffer-substring-no-properties (point-min) (point-max))))))
|
|
||||||
:name "read_url"
|
|
||||||
:description "Fetch and read the contents of a URL"
|
|
||||||
:args (list '(:name "url"
|
|
||||||
:type string
|
|
||||||
:description "The URL to read"))
|
|
||||||
:category "web")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda (filepath)
|
|
||||||
(with-temp-buffer
|
|
||||||
(insert-file-contents (expand-file-name filepath))
|
|
||||||
(buffer-string)))
|
|
||||||
:name "read_file"
|
|
||||||
:description "Read and display the contents of a file"
|
|
||||||
:args (list '(:name "filepath"
|
|
||||||
:type string
|
|
||||||
:description "Path to the file to read. Supports relative paths and ~."))
|
|
||||||
:category "filesystem")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda (directory)
|
|
||||||
(mapconcat #'identity
|
|
||||||
(directory-files directory)
|
|
||||||
"\n"))
|
|
||||||
:name "list_directory"
|
|
||||||
:description "List the contents of a given directory"
|
|
||||||
:args (list '(:name "directory"
|
|
||||||
:type string
|
|
||||||
:description "The path to the directory to list"))
|
|
||||||
:category "filesystem")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda () (mapcar 'buffer-name (buffer-list)))
|
|
||||||
:name "list_buffers"
|
|
||||||
:description "Return a list containing all the Emacs buffers"
|
|
||||||
:category "emacs")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda (buffer)
|
|
||||||
(unless (buffer-live-p (get-buffer buffer))
|
|
||||||
(error "Error: buffer %s is not live." buffer))
|
|
||||||
(with-current-buffer buffer
|
|
||||||
(buffer-substring-no-properties (point-min) (point-max))))
|
|
||||||
:name "read_buffer"
|
|
||||||
:description "Return the contents of an Emacs buffer"
|
|
||||||
:args (list '(:name "buffer"
|
|
||||||
:type string
|
|
||||||
:description "The name of the buffer whose contents are to be retrieved"))
|
|
||||||
:category "emacs")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:function (lambda (buffer text)
|
|
||||||
(with-current-buffer (get-buffer-create buffer)
|
|
||||||
(save-excursion
|
|
||||||
(goto-char (point-max))
|
|
||||||
(insert text)))
|
|
||||||
(format "Appended text to buffer %s" buffer))
|
|
||||||
:name "append_to_buffer"
|
|
||||||
:description "Append text to an Emacs buffer. If the buffer does not exist, it will be created."
|
|
||||||
:confirm t
|
|
||||||
:args (list '(:name "buffer"
|
|
||||||
:type string
|
|
||||||
:description "The name of the buffer to append text to.")
|
|
||||||
'(:name "text"
|
|
||||||
:type string
|
|
||||||
:description "The text to append to the buffer."))
|
|
||||||
:category "emacs")
|
|
||||||
,(gptel-make-tool
|
|
||||||
:name "EditBuffer"
|
|
||||||
:function #'ccr/edit-buffer
|
|
||||||
:description "Edits Emacs buffers"
|
|
||||||
:confirm t
|
|
||||||
:args '((:name "buffer_name"
|
|
||||||
:type string
|
|
||||||
:description "Name of the buffer to modify"
|
|
||||||
:required t)
|
|
||||||
(:name "old_string"
|
|
||||||
:type string
|
|
||||||
:description "Text to replace (must match exactly)"
|
|
||||||
:required t)
|
|
||||||
(:name "new_string"
|
|
||||||
:type string
|
|
||||||
:description "Text to replace old_string with"
|
|
||||||
:required t))
|
|
||||||
:category "edit")
|
|
||||||
,
|
|
||||||
(gptel-make-tool
|
|
||||||
:name "ReplaceBuffer"
|
|
||||||
:function #'ccr/replace-buffer
|
|
||||||
:description "Completely overwrites buffer contents"
|
|
||||||
:confirm t
|
|
||||||
:args '((:name "buffer_name"
|
|
||||||
:type string
|
|
||||||
:description "Name of the buffer to overwrite"
|
|
||||||
:required t)
|
|
||||||
(:name "content"
|
|
||||||
:type string
|
|
||||||
:description "Content to write to the buffer"
|
|
||||||
:required t))
|
|
||||||
:category "edit")
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
||||||
(defun ccr/suggest-eshell-command ()
|
(defun ccr/suggest-eshell-command ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(eshell-bol)
|
(eshell-bol)
|
||||||
(let ((start-pos (point))
|
(let ((start-pos (point))
|
||||||
(end-pos (line-end-position)))
|
(end-pos (line-end-position)))
|
||||||
(gptel-request
|
(gptel-request
|
||||||
(buffer-substring-no-properties start-pos end-pos) ;the prompt
|
(buffer-substring-no-properties start-pos end-pos) ;the prompt
|
||||||
:system "You are proficient with emacs shell (eshell), translate the following to something I could directly prompt to the shell. Your responses should only be code, without explanation or formatting or quoting."
|
:system "You are proficient with emacs shell (eshell), translate the following to something I could directly prompt to the shell. Your responses should only be code, without explanation or formatting or quoting."
|
||||||
:buffer (current-buffer)
|
:buffer (current-buffer)
|
||||||
:context (cons (set-marker (make-marker) start-pos)
|
:context (cons (set-marker (make-marker) start-pos)
|
||||||
(set-marker (make-marker) end-pos))
|
(set-marker (make-marker) end-pos))
|
||||||
:callback
|
:callback
|
||||||
(lambda (response info)
|
(lambda (response info)
|
||||||
(if (not response)
|
(if (not response)
|
||||||
(message "ChatGPT response failed with: %s" (plist-get info :status))
|
(message "ChatGPT response failed with: %s" (plist-get info :status))
|
||||||
(kill-region start-pos end-pos)
|
(kill-region start-pos end-pos)
|
||||||
(insert response)))))))
|
(insert response)))))))
|
||||||
|
|
||||||
(add-to-list 'display-buffer-alist
|
(add-to-list 'display-buffer-alist
|
||||||
'("^\\*ChatGPT\\*"
|
'("^\\*ChatGPT\\*"
|
||||||
(display-buffer-full-frame)
|
(display-buffer-full-frame)
|
||||||
(name . "floating")))
|
(name . "floating")))
|
||||||
|
|
||||||
(defun ccr/start-chatgpt () ;; Used from outside Emacs by emacsclient --eval
|
(defun ccr/start-chatgpt () ;; Used from outside Emacs by emacsclient --eval
|
||||||
(display-buffer (gptel "*ChatGPT*"))
|
(display-buffer (gptel "*ChatGPT*"))
|
||||||
(set-frame-name "floating")
|
(set-frame-name "floating")
|
||||||
)
|
;; (delete-other-windows)
|
||||||
|
;; (add-hook 'kill-buffer-hook 'delete-frame nil 't)
|
||||||
|
) ;; destroy frame on exit
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package mixed-pitch
|
(use-package mixed-pitch
|
||||||
|
@ -1226,9 +945,9 @@ This is meant to be an helper to be called from the window manager."
|
||||||
(require 'password-store-otp) ;; FIXME use `use-pacakge' idiomatic way
|
(require 'password-store-otp) ;; FIXME use `use-pacakge' idiomatic way
|
||||||
|
|
||||||
:bind (("C-c p p" . password-store-copy)
|
:bind (("C-c p p" . password-store-copy)
|
||||||
("C-c p o" . password-store-otp-token-copy)
|
("C-c p o" . password-store-otp-token-copy)
|
||||||
("C-c p e" . password-store-edit)
|
("C-c p e" . password-store-edit)
|
||||||
("C-c p i" . password-store-insert)))
|
("C-c p i" . password-store-insert)))
|
||||||
|
|
||||||
(use-package with-editor
|
(use-package with-editor
|
||||||
:init (shell-command-with-editor-mode +1))
|
:init (shell-command-with-editor-mode +1))
|
||||||
|
@ -1271,40 +990,23 @@ This is meant to be an helper to be called from the window manager."
|
||||||
|
|
||||||
;;; Experiments, remove from here
|
;;; Experiments, remove from here
|
||||||
|
|
||||||
(defun ccr/test (niri-socket)
|
(defun ccr/test ()
|
||||||
"Select a window and focus it based on `niri msg` output."
|
"test"
|
||||||
(interactive)
|
(interactive)
|
||||||
(let* ((niri-output (ccr/niri-get-windows niri-socket))
|
(with-selected-frame
|
||||||
(display-list (mapcar (lambda (entry)
|
(make-frame '((name . "emacs-run-launcher")
|
||||||
(let ((title (cdr (assoc 'title entry)))
|
(minibuffer . only)
|
||||||
(app-id (cdr (assoc 'app_id entry)))
|
(fullscreen . 0) ; no fullscreen
|
||||||
(id (cdr (assoc 'id entry))))
|
(undecorated . t) ; remove title bar
|
||||||
(cons (format "%s - %s" title app-id) id)))
|
;;(auto-raise . t) ; focus on this frame
|
||||||
niri-output)))
|
;;(tool-bar-lines . 0)
|
||||||
(with-selected-frame
|
;;(menu-bar-lines . 0)
|
||||||
(make-frame '((name . "Emacs Selector")
|
(internal-border-width . 10)
|
||||||
(minibuffer . only)
|
(width . 80)
|
||||||
(fullscreen . 0)
|
(height . 11)))
|
||||||
(undecorated . t)
|
(unwind-protect
|
||||||
(internal-border-width . 10)
|
(completing-read "ciao " '("foo" "bar") nil t "")
|
||||||
(width . 120)
|
(delete-frame))))
|
||||||
(height . 20)))
|
|
||||||
(unwind-protect
|
|
||||||
(let* ((entry (completing-read "Select window: " (mapcar #'car display-list) nil t ""))
|
|
||||||
(entry-id (cdr (assoc entry display-list))) ;; Get the ID associated with the selected entry
|
|
||||||
(command (format "NIRI_SOCKET=\"%s\" niri msg action focus-window --id %s" niri-socket entry-id)))
|
|
||||||
(message command)
|
|
||||||
(shell-command command))
|
|
||||||
(delete-frame)))))
|
|
||||||
|
|
||||||
|
|
||||||
(defun ccr/niri-get-windows (niri-socket)
|
|
||||||
"Esegue `niri msg --json windows` e parse l'output JSON in una alist."
|
|
||||||
(let* ((command (format "NIRI_SOCKET=\"%s\" niri msg --json windows" niri-socket))
|
|
||||||
(output (shell-command-to-string command))
|
|
||||||
(json-object-type 'alist) ; Usa alist per rappresentare gli oggetti JSON
|
|
||||||
(parsed-json (json-read-from-string output)))
|
|
||||||
parsed-json))
|
|
||||||
|
|
||||||
|
|
||||||
(provide 'init)
|
(provide 'init)
|
||||||
|
|
|
@ -14,10 +14,7 @@ in
|
||||||
{
|
{
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
nativeMessagingHosts = [
|
nativeMessagingHosts = [ pkgs.tridactyl-native ];
|
||||||
pkgs.tridactyl-native
|
|
||||||
pkgs.vdhcoapp
|
|
||||||
];
|
|
||||||
policies = {
|
policies = {
|
||||||
DisableTelemetry = true;
|
DisableTelemetry = true;
|
||||||
DisableFirefoxStudies = true;
|
DisableFirefoxStudies = true;
|
||||||
|
@ -66,7 +63,7 @@ in
|
||||||
};
|
};
|
||||||
profiles.default = {
|
profiles.default = {
|
||||||
search.force = true;
|
search.force = true;
|
||||||
search.default = "google";
|
search.default = "DuckDuckGo";
|
||||||
search.engines = {
|
search.engines = {
|
||||||
"Searx" = {
|
"Searx" = {
|
||||||
urls = [
|
urls = [
|
||||||
|
@ -82,6 +79,7 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
bookmarks = [ ];
|
||||||
extensions = [ ];
|
extensions = [ ];
|
||||||
userChrome = builtins.readFile ./userchrome.css;
|
userChrome = builtins.readFile ./userchrome.css;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.gimp ];
|
|
||||||
}
|
|
|
@ -27,18 +27,12 @@ in
|
||||||
rebase.autostash = true;
|
rebase.autostash = true;
|
||||||
github.user = "aciceri";
|
github.user = "aciceri";
|
||||||
|
|
||||||
user.signingKey = "/home/${username}/.ssh/id_ed25519";
|
user.signingKey = "/home/${username}/.ssh/id_rsa";
|
||||||
gpg.format = "ssh";
|
gpg.format = "ssh";
|
||||||
commit.gpgsign = true;
|
commit.gpgsign = true;
|
||||||
|
|
||||||
credential.helper = "libsecret";
|
credential.helper = "manager";
|
||||||
credential.credentialStore = "cache";
|
credential.credentialStore = "cache";
|
||||||
|
|
||||||
core = {
|
|
||||||
fsmonitor = true;
|
|
||||||
untrackedcache = true;
|
|
||||||
};
|
|
||||||
fetch.writeCommitGraph = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
userName = config.name;
|
userName = config.name;
|
||||||
|
|
|
@ -2,13 +2,25 @@
|
||||||
{
|
{
|
||||||
services.gpg-agent = {
|
services.gpg-agent = {
|
||||||
enable = true;
|
enable = true;
|
||||||
pinentry.package = pkgs.pinentry-rofi.override {
|
enableSshSupport = true;
|
||||||
rofi = pkgs.rofi-wayland;
|
extraConfig =
|
||||||
};
|
let
|
||||||
extraConfig = ''
|
pinentryRofi = pkgs.writeShellApplication {
|
||||||
allow-emacs-pinentry
|
name = "pinentry-rofi-with-env";
|
||||||
allow-loopback-pinentry
|
runtimeInputs = with pkgs; [
|
||||||
'';
|
coreutils
|
||||||
|
rofi
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
"${pkgs.pinentry-rofi}/bin/pinentry-rofi" "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
''
|
||||||
|
allow-emacs-pinentry
|
||||||
|
allow-loopback-pinentry
|
||||||
|
pinentry-program ${pinentryRofi}/bin/pinentry-rofi-with-env
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.gpg = {
|
programs.gpg = {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
@ -55,14 +54,7 @@ in
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = {
|
# font.name = lib.mkForce "Sans,Symbols Nerd Font";
|
||||||
name = "Catppuccin-GTK-Purple-Dark-Compact";
|
|
||||||
package = pkgs.magnetic-catppuccin-gtk.override {
|
|
||||||
accent = [ "purple" ];
|
|
||||||
shade = "dark";
|
|
||||||
size = "compact";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
iconTheme = {
|
iconTheme = {
|
||||||
name = "Adwaita";
|
name = "Adwaita";
|
||||||
package = pkgs.adwaita-icon-theme;
|
package = pkgs.adwaita-icon-theme;
|
||||||
|
@ -70,21 +62,21 @@ in
|
||||||
cursorTheme = {
|
cursorTheme = {
|
||||||
name = "catppuccin-mocha-sapphire";
|
name = "catppuccin-mocha-sapphire";
|
||||||
package = pkgs.catppuccin-cursors;
|
package = pkgs.catppuccin-cursors;
|
||||||
size = 38;
|
size = 40;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
home.file.".icons/catppuccin-mocha-sapphire" = {
|
home.file.".icons/catppuccin-mocha-sapphire" = {
|
||||||
source = "${pkgs.catppuccin-cursors.mochaSapphire}/share/icons/catppuccin-mocha-sapphire-cursors";
|
source = "${pkgs.catppuccin-cursors.mochaSapphire}/share/icons/catppuccin-mocha-sapphire-cursors";
|
||||||
recursive = true;
|
recursive = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
qt = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = false;
|
enable = true;
|
||||||
plugins = with pkgs.hyprlandPlugins; [
|
plugins = with pkgs.hyprlandPlugins; [
|
||||||
hy3
|
hy3
|
||||||
hyprspace
|
hyprspace
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ fleetFlake, pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ fleetFlake.packages.${pkgs.system}.ib-tws ];
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.jellyfin-media-player ];
|
|
||||||
}
|
|
|
@ -1,580 +0,0 @@
|
||||||
// This config is in the KDL format: https://kdl.dev
|
|
||||||
// "/-" comments out the following node.
|
|
||||||
// Check the wiki for a full description of the configuration:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
|
|
||||||
|
|
||||||
// Input device configuration.
|
|
||||||
// Find the full list of options on the wiki:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
|
|
||||||
input {
|
|
||||||
keyboard {
|
|
||||||
xkb {
|
|
||||||
layout "us"
|
|
||||||
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next sections include libinput settings.
|
|
||||||
// Omitting settings disables them, or leaves them at their default values.
|
|
||||||
touchpad {
|
|
||||||
// off
|
|
||||||
tap
|
|
||||||
dwt
|
|
||||||
// dwtp
|
|
||||||
natural-scroll
|
|
||||||
// accel-speed 0.2
|
|
||||||
// accel-profile "flat"
|
|
||||||
// scroll-method "two-finger"
|
|
||||||
// disabled-on-external-mouse
|
|
||||||
}
|
|
||||||
|
|
||||||
mouse {
|
|
||||||
// off
|
|
||||||
// natural-scroll
|
|
||||||
// accel-speed 0.2
|
|
||||||
// accel-profile "flat"
|
|
||||||
// scroll-method "no-scroll"
|
|
||||||
}
|
|
||||||
|
|
||||||
trackpoint {
|
|
||||||
// off
|
|
||||||
// natural-scroll
|
|
||||||
// accel-speed 0.2
|
|
||||||
// accel-profile "flat"
|
|
||||||
// scroll-method "on-button-down"
|
|
||||||
// scroll-button 273
|
|
||||||
// middle-emulation
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
|
||||||
warp-mouse-to-focus
|
|
||||||
|
|
||||||
// Focus windows and outputs automatically when moving the mouse into them.
|
|
||||||
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
|
||||||
focus-follows-mouse max-scroll-amount="0%"
|
|
||||||
}
|
|
||||||
|
|
||||||
cursor {
|
|
||||||
xcursor-theme "catppuccin-mocha-sapphire"
|
|
||||||
xcursor-size 38
|
|
||||||
hide-when-typing
|
|
||||||
hide-after-inactive-ms 10000
|
|
||||||
}
|
|
||||||
|
|
||||||
spawn-at-startup "xwayland-satellite"
|
|
||||||
|
|
||||||
environment {
|
|
||||||
QT_QPA_PLATFORM "wayland"
|
|
||||||
DISPLAY ":0"
|
|
||||||
}
|
|
||||||
|
|
||||||
hotkey-overlay {
|
|
||||||
skip-at-startup
|
|
||||||
}
|
|
||||||
|
|
||||||
// You can configure outputs by their name, which you can find
|
|
||||||
// by running `niri msg outputs` while inside a niri instance.
|
|
||||||
// The built-in laptop monitor is usually called "eDP-1".
|
|
||||||
// Find more information on the wiki:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
|
|
||||||
// Remember to uncomment the node by removing "/-"!
|
|
||||||
output "eDP-1" {
|
|
||||||
// Uncomment this line to disable this output.
|
|
||||||
// off
|
|
||||||
|
|
||||||
// Resolution and, optionally, refresh rate of the output.
|
|
||||||
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
|
||||||
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
|
||||||
// for the resolution.
|
|
||||||
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
|
||||||
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
|
||||||
mode "1920x1080@59.999"
|
|
||||||
|
|
||||||
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
|
||||||
scale 1.1
|
|
||||||
|
|
||||||
// Transform allows to rotate the output counter-clockwise, valid values are:monitor
|
|
||||||
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
|
||||||
transform "normal"
|
|
||||||
|
|
||||||
// Position of the output in the global coordinate space.
|
|
||||||
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
|
||||||
// The cursor can only move between directly adjacent outputs.
|
|
||||||
// Output scale and rotation has to be taken into account for positioning:
|
|
||||||
// outputs are sized in logical, or scaled, pixels.
|
|
||||||
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
|
||||||
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
|
||||||
// If the position is unset or results in an overlap, the output is instead placed
|
|
||||||
// automatically.
|
|
||||||
// position x=1280 y=0
|
|
||||||
}
|
|
||||||
|
|
||||||
output "Dell Inc. DELL U2515H 9X2VY5170PJL" {
|
|
||||||
mode "2560x1440@59.951"
|
|
||||||
scale 1
|
|
||||||
transform "normal"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Settings that influence how windows are positioned and sized.
|
|
||||||
// Find more information on the wiki:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
|
||||||
layout {
|
|
||||||
// Set gaps around windows in logical pixels.
|
|
||||||
gaps 16
|
|
||||||
|
|
||||||
// When to center a column when changing focus, options are:
|
|
||||||
// - "never", default behavior, focusing an off-screen column will keep at the left
|
|
||||||
// or right edge of the screen.
|
|
||||||
// - "always", the focused column will always be centered.
|
|
||||||
// - "on-overflow", focusing a column will center it if it doesn't fit
|
|
||||||
// together with the previously focused column.
|
|
||||||
center-focused-column "never"
|
|
||||||
|
|
||||||
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
|
||||||
preset-column-widths {
|
|
||||||
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
|
||||||
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
|
||||||
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
|
||||||
proportion 0.33333
|
|
||||||
proportion 0.5
|
|
||||||
proportion 0.66667
|
|
||||||
|
|
||||||
// Fixed sets the width in logical pixels exactly.
|
|
||||||
// fixed 1920
|
|
||||||
}
|
|
||||||
|
|
||||||
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
|
||||||
// preset-window-heights { }
|
|
||||||
|
|
||||||
// You can change the default width of the new windows.
|
|
||||||
default-column-width { proportion 0.5; }
|
|
||||||
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
|
||||||
// default-column-width {}
|
|
||||||
|
|
||||||
// By default focus ring and border are rendered as a solid background rectangle
|
|
||||||
// behind windows. That is, they will show up through semitransparent windows.
|
|
||||||
// This is because windows using client-side decorations can have an arbitrary shape.
|
|
||||||
//
|
|
||||||
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
|
||||||
// Niri will draw focus ring and border *around* windows that agree to omit their
|
|
||||||
// client-side decorations.
|
|
||||||
//
|
|
||||||
// Alternatively, you can override it with a window rule called
|
|
||||||
// `draw-border-with-background`.
|
|
||||||
|
|
||||||
// You can change how the focus ring looks.
|
|
||||||
focus-ring {
|
|
||||||
// Uncomment this line to disable the focus ring.
|
|
||||||
// off
|
|
||||||
|
|
||||||
// How many logical pixels the ring extends out from the windows.
|
|
||||||
width 2
|
|
||||||
|
|
||||||
// Colors can be set in a variety of ways:
|
|
||||||
// - CSS named colors: "red"
|
|
||||||
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
|
||||||
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
|
||||||
|
|
||||||
// Color of the ring on the active monitor.
|
|
||||||
active-color "#7fc8ff"
|
|
||||||
|
|
||||||
// Color of the ring on inactive monitors.
|
|
||||||
inactive-color "#505050"
|
|
||||||
|
|
||||||
// You can also use gradients. They take precedence over solid colors.
|
|
||||||
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
|
||||||
// The angle is the same as in linear-gradient, and is optional,
|
|
||||||
// defaulting to 180 (top-to-bottom gradient).
|
|
||||||
// You can use any CSS linear-gradient tool on the web to set these up.
|
|
||||||
// Changing the color space is also supported, check the wiki for more info.
|
|
||||||
//
|
|
||||||
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
|
||||||
|
|
||||||
// You can also color the gradient relative to the entire view
|
|
||||||
// of the workspace, rather than relative to just the window itself.
|
|
||||||
// To do that, set relative-to="workspace-view".
|
|
||||||
//
|
|
||||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
|
||||||
}
|
|
||||||
|
|
||||||
// You can also add a border. It's similar to the focus ring, but always visible.
|
|
||||||
border {
|
|
||||||
// The settings are the same as for the focus ring.
|
|
||||||
// If you enable the border, you probably want to disable the focus ring.
|
|
||||||
off
|
|
||||||
|
|
||||||
width 4
|
|
||||||
active-color "#ffc87f"
|
|
||||||
inactive-color "#505050"
|
|
||||||
|
|
||||||
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
|
||||||
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
|
||||||
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
|
||||||
// Left and right struts will cause the next window to the side to always be visible.
|
|
||||||
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
|
||||||
// layer-shell panels and regular gaps.
|
|
||||||
struts {
|
|
||||||
// left 64
|
|
||||||
// right 64
|
|
||||||
// top 64
|
|
||||||
// bottom 64
|
|
||||||
}
|
|
||||||
|
|
||||||
shadow {
|
|
||||||
on
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
layer-rule {
|
|
||||||
match namespace="^rofi$"
|
|
||||||
shadow {
|
|
||||||
on
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add lines like this to spawn processes at startup.
|
|
||||||
// Note that running niri as a session supports xdg-desktop-autostart,
|
|
||||||
// which may be more convenient to use.
|
|
||||||
// See the binds section below for more spawn examples.
|
|
||||||
spawn-at-startup "waypaper" "--wallpaper" "~/.config/niri/wallpaper.png"
|
|
||||||
|
|
||||||
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
|
||||||
// If the client will specifically ask for CSD, the request will be honored.
|
|
||||||
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
|
||||||
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
|
||||||
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
|
||||||
prefer-no-csd
|
|
||||||
|
|
||||||
// You can change the path where screenshots are saved.
|
|
||||||
// A ~ at the front will be expanded to the home directory.
|
|
||||||
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
|
||||||
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
|
||||||
|
|
||||||
// You can also set this to null to disable saving screenshots to disk.
|
|
||||||
// screenshot-path null
|
|
||||||
|
|
||||||
// Animation settings.
|
|
||||||
// The wiki explains how to configure individual animations:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
|
||||||
animations {
|
|
||||||
// Uncomment to turn off all animations.
|
|
||||||
// off
|
|
||||||
|
|
||||||
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
|
||||||
// slowdown 3.0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Window rules let you adjust behavior for individual windows.
|
|
||||||
// Find more information on the wiki:
|
|
||||||
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
|
||||||
|
|
||||||
// Work around WezTerm's initial configure bug
|
|
||||||
// by setting an empty default-column-width.
|
|
||||||
window-rule {
|
|
||||||
// This regular expression is intentionally made as specific as possible,
|
|
||||||
// since this is the default config, and we want no false positives.
|
|
||||||
// You can get away with just app-id="wezterm" if you want.
|
|
||||||
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
|
||||||
default-column-width {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example: block out two password managers from screen capture.
|
|
||||||
// (This example rule is commented out with a "/-" in front.)
|
|
||||||
/-window-rule {
|
|
||||||
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
|
||||||
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
|
||||||
|
|
||||||
block-out-from "screen-capture"
|
|
||||||
|
|
||||||
// Use this instead if you want them visible on third-party screenshot tools.
|
|
||||||
// block-out-from "screencast"
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
geometry-corner-radius 4
|
|
||||||
clip-to-geometry true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match app-id=r#"^spotify$"#
|
|
||||||
open-maximized true
|
|
||||||
open-on-workspace "spotify"
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match app-id=r#"^Slack$"#
|
|
||||||
open-maximized true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match app-id=r#"^Element"#
|
|
||||||
open-maximized true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match title=r#"^Emacs Selector$"#
|
|
||||||
opacity 0.95
|
|
||||||
open-floating true
|
|
||||||
open-focused true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match title=r#"^bTop$"#
|
|
||||||
opacity 0.95
|
|
||||||
open-floating true
|
|
||||||
open-focused true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match title=r#"^GPTel - Emacs$"#
|
|
||||||
opacity 0.95
|
|
||||||
open-floating true
|
|
||||||
open-focused true
|
|
||||||
}
|
|
||||||
|
|
||||||
window-rule {
|
|
||||||
match title=r#"^Authentication Required"#
|
|
||||||
open-floating true
|
|
||||||
open-focused true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
binds {
|
|
||||||
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
|
||||||
// in the end. To find an XKB name for a particular key, you may use a program
|
|
||||||
// like wev.
|
|
||||||
//
|
|
||||||
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
|
||||||
// when running as a winit window.
|
|
||||||
//
|
|
||||||
// Most actions that you can bind here can also be invoked programmatically with
|
|
||||||
// `niri msg action do-something`.
|
|
||||||
|
|
||||||
// Mod-Shift-/, which is usually the same as Mod-?,
|
|
||||||
// shows a list of important hotkeys.
|
|
||||||
Mod+Shift+Slash { show-hotkey-overlay; }
|
|
||||||
|
|
||||||
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
|
||||||
Mod+T { spawn "footclient"; }
|
|
||||||
Mod+D { spawn "rofi" "-show" "drun"; }
|
|
||||||
Mod+W { spawn "rofi" "-show" "window"; }
|
|
||||||
Mod+P { spawn "rofi-pass" "--clip"; }
|
|
||||||
Mod+X { spawn "emacsclient" "-c"; }
|
|
||||||
Mod+B { spawn "firefox"; }
|
|
||||||
Mod+RETURN { spawn "emacsclient" "-c" "--eval" "(ccr/start-eshell)"; }
|
|
||||||
Mod+M { spawn "emacsclient" "-c" "--eval" "(notmuch-search \"tag:new\")"; }
|
|
||||||
// Mod+G { spawn "emacsclient" "-c" "--eval" "(switch-to-buffer (gptel \"*ChatGPT*\"))" "-F" "((name . \"GPTel - Emacs\") (width . $NIRI_GPTEL_COLS) (height . $NIRI_GPTEL_ROWS))'"; }
|
|
||||||
Mod+G { spawn "run-floating-gptel"; }
|
|
||||||
Mod+Shift+C { spawn "emacsclient" "-c" "--eval" "(org-roam-dailies-capture-today)"; }
|
|
||||||
Mod+Alt+L { spawn "swaylock"; }
|
|
||||||
Mod+Space { spawn "rofi" "-show" "menu" "-modi" "menu:rofi-power-menu"; }
|
|
||||||
// Mod+Ctrl+b { spawn "foot" "--title='bTop'" "-W" "$NIRI_BTOP_COLSx$NIRI_BTOP_ROWS" "btop";}
|
|
||||||
Mod+Ctrl+b { spawn "run-floating-btop"; }
|
|
||||||
|
|
||||||
// Example volume keys mappings for PipeWire & WirePlumber.
|
|
||||||
// The allow-when-locked=true property makes them work even when the session is locked.
|
|
||||||
XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
|
||||||
XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
|
||||||
XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
|
||||||
XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
|
||||||
|
|
||||||
Mod+Shift+period { spawn "brightnessctl" "s" "5%+"; }
|
|
||||||
Mod+Shift+comma { spawn "brightnessctl" "s" "5%-"; }
|
|
||||||
Mod+XF86MonBrightnessUp { spawn "brightnessctl" "s" "5%+"; }
|
|
||||||
Mod+XF86MonBrightnessDown { spawn "brightnessctl" "s" "5%-"; }
|
|
||||||
|
|
||||||
Mod+Q { close-window; }
|
|
||||||
|
|
||||||
Mod+Left { focus-column-left; }
|
|
||||||
Mod+Down { focus-window-down; }
|
|
||||||
Mod+Up { focus-window-up; }
|
|
||||||
Mod+Right { focus-column-right; }
|
|
||||||
Mod+H { focus-column-left; }
|
|
||||||
Mod+J { focus-window-down; }
|
|
||||||
Mod+K { focus-window-up; }
|
|
||||||
Mod+L { focus-column-right; }
|
|
||||||
|
|
||||||
Mod+Ctrl+Left { move-column-left; }
|
|
||||||
Mod+Ctrl+Down { move-window-down; }
|
|
||||||
Mod+Ctrl+Up { move-window-up; }
|
|
||||||
Mod+Ctrl+Right { move-column-right; }
|
|
||||||
Mod+Ctrl+H { move-column-left; }
|
|
||||||
Mod+Ctrl+J { move-window-down; }
|
|
||||||
Mod+Ctrl+K { move-window-up; }
|
|
||||||
Mod+Ctrl+L { move-column-right; }
|
|
||||||
|
|
||||||
// Alternative commands that move across workspaces when reaching
|
|
||||||
// the first or last window in a column.
|
|
||||||
// Mod+J { focus-window-or-workspace-down; }
|
|
||||||
// Mod+K { focus-window-or-workspace-up; }
|
|
||||||
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
|
||||||
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
|
||||||
|
|
||||||
Mod+Home { focus-column-first; }
|
|
||||||
Mod+End { focus-column-last; }
|
|
||||||
Mod+Ctrl+Home { move-column-to-first; }
|
|
||||||
Mod+Ctrl+End { move-column-to-last; }
|
|
||||||
|
|
||||||
Mod+Shift+Left { focus-monitor-left; }
|
|
||||||
Mod+Shift+Down { focus-monitor-down; }
|
|
||||||
Mod+Shift+Up { focus-monitor-up; }
|
|
||||||
Mod+Shift+Right { focus-monitor-right; }
|
|
||||||
Mod+Shift+H { focus-monitor-left; }
|
|
||||||
Mod+Shift+J { focus-monitor-down; }
|
|
||||||
Mod+Shift+K { focus-monitor-up; }
|
|
||||||
Mod+Shift+L { focus-monitor-right; }
|
|
||||||
|
|
||||||
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
|
||||||
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
|
||||||
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
|
||||||
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
|
||||||
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
|
||||||
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
|
||||||
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
|
||||||
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
|
||||||
|
|
||||||
// Alternatively, there are commands to move just a single window:
|
|
||||||
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
|
||||||
// ...
|
|
||||||
|
|
||||||
// And you can also move a whole workspace to another monitor:
|
|
||||||
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
|
||||||
// ...
|
|
||||||
|
|
||||||
Mod+Page_Down { focus-workspace-down; }
|
|
||||||
Mod+Page_Up { focus-workspace-up; }
|
|
||||||
Mod+U { focus-workspace-down; }
|
|
||||||
Mod+I { focus-workspace-up; }
|
|
||||||
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
|
||||||
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
|
||||||
Mod+Ctrl+U { move-column-to-workspace-down; }
|
|
||||||
Mod+Ctrl+I { move-column-to-workspace-up; }
|
|
||||||
|
|
||||||
// Alternatively, there are commands to move just a single window:
|
|
||||||
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
|
||||||
// ...
|
|
||||||
|
|
||||||
Mod+Shift+Page_Down { move-workspace-down; }
|
|
||||||
Mod+Shift+Page_Up { move-workspace-up; }
|
|
||||||
Mod+Shift+U { move-workspace-down; }
|
|
||||||
Mod+Shift+I { move-workspace-up; }
|
|
||||||
|
|
||||||
// You can bind mouse wheel scroll ticks using the following syntax.
|
|
||||||
// These binds will change direction based on the natural-scroll setting.
|
|
||||||
//
|
|
||||||
// To avoid scrolling through workspaces really fast, you can use
|
|
||||||
// the cooldown-ms property. The bind will be rate-limited to this value.
|
|
||||||
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
|
||||||
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
|
||||||
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
|
||||||
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
|
||||||
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
|
||||||
|
|
||||||
Mod+WheelScrollRight { focus-column-right; }
|
|
||||||
Mod+WheelScrollLeft { focus-column-left; }
|
|
||||||
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
|
||||||
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
|
||||||
|
|
||||||
// Usually scrolling up and down with Shift in applications results in
|
|
||||||
// horizontal scrolling; these binds replicate that.
|
|
||||||
Mod+Shift+WheelScrollDown { focus-column-right; }
|
|
||||||
Mod+Shift+WheelScrollUp { focus-column-left; }
|
|
||||||
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
|
||||||
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
|
||||||
|
|
||||||
// Similarly, you can bind touchpad scroll "ticks".
|
|
||||||
// Touchpad scrolling is continuous, so for these binds it is split into
|
|
||||||
// discrete intervals.
|
|
||||||
// These binds are also affected by touchpad's natural-scroll, so these
|
|
||||||
// example binds are "inverted", since we have natural-scroll enabled for
|
|
||||||
// touchpads by default.
|
|
||||||
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
|
||||||
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
|
||||||
|
|
||||||
// You can refer to workspaces by index. However, keep in mind that
|
|
||||||
// niri is a dynamic workspace system, so these commands are kind of
|
|
||||||
// "best effort". Trying to refer to a workspace index bigger than
|
|
||||||
// the current workspace count will instead refer to the bottommost
|
|
||||||
// (empty) workspace.
|
|
||||||
//
|
|
||||||
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
|
||||||
// will all refer to the 3rd workspace.
|
|
||||||
Mod+1 { focus-workspace 1; }
|
|
||||||
Mod+2 { focus-workspace 2; }
|
|
||||||
Mod+3 { focus-workspace 3; }
|
|
||||||
Mod+4 { focus-workspace 4; }
|
|
||||||
Mod+5 { focus-workspace 5; }
|
|
||||||
Mod+6 { focus-workspace 6; }
|
|
||||||
Mod+7 { focus-workspace 7; }
|
|
||||||
Mod+8 { focus-workspace 8; }
|
|
||||||
Mod+9 { focus-workspace 9; }
|
|
||||||
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
|
||||||
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
|
||||||
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
|
||||||
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
|
||||||
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
|
||||||
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
|
||||||
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
|
||||||
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
|
||||||
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
|
||||||
|
|
||||||
// Alternatively, there are commands to move just a single window:
|
|
||||||
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
|
||||||
|
|
||||||
// Switches focus between the current and the previous workspace.
|
|
||||||
// Mod+Tab { focus-workspace-previous; }
|
|
||||||
|
|
||||||
// Consume one window from the right into the focused column.
|
|
||||||
Mod+Comma { consume-window-into-column; }
|
|
||||||
// Expel one window from the focused column to the right.
|
|
||||||
Mod+Period { expel-window-from-column; }
|
|
||||||
|
|
||||||
// There are also commands that consume or expel a single window to the side.
|
|
||||||
Mod+BracketLeft { consume-or-expel-window-left; }
|
|
||||||
Mod+BracketRight { consume-or-expel-window-right; }
|
|
||||||
|
|
||||||
Mod+R { switch-preset-column-width; }
|
|
||||||
Mod+Shift+R { switch-preset-window-height; }
|
|
||||||
Mod+Ctrl+R { reset-window-height; }
|
|
||||||
Mod+F { maximize-column; }
|
|
||||||
Mod+Shift+F { fullscreen-window; }
|
|
||||||
Mod+C { center-column; }
|
|
||||||
|
|
||||||
// Finer width adjustments.
|
|
||||||
// This command can also:
|
|
||||||
// * set width in pixels: "1000"
|
|
||||||
// * adjust width in pixels: "-5" or "+5"
|
|
||||||
// * set width as a percentage of screen width: "25%"
|
|
||||||
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
|
||||||
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
|
||||||
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
|
||||||
Mod+Minus { set-column-width "-10%"; }
|
|
||||||
Mod+Equal { set-column-width "+10%"; }
|
|
||||||
|
|
||||||
// Finer height adjustments when in column with other windows.
|
|
||||||
Mod+Shift+Minus { set-window-height "-10%"; }
|
|
||||||
Mod+Shift+Equal { set-window-height "+10%"; }
|
|
||||||
|
|
||||||
// Actions to switch layouts.
|
|
||||||
// Note: if you uncomment these, make sure you do NOT have
|
|
||||||
// a matching layout switch hotkey configured in xkb options above.
|
|
||||||
// Having both at once on the same hotkey will break the switching,
|
|
||||||
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
|
||||||
// Mod+Space { switch-layout "next"; }
|
|
||||||
// Mod+Shift+Space { switch-layout "prev"; }
|
|
||||||
|
|
||||||
Mod+S { screenshot; }
|
|
||||||
Mod+Ctrl+S { screenshot-window; }
|
|
||||||
|
|
||||||
// The quit action will show a confirmation dialog to avoid accidental exits.
|
|
||||||
Mod+Shift+E { quit; }
|
|
||||||
Ctrl+Alt+Delete { quit; }
|
|
||||||
|
|
||||||
// Powers off the monitors. To turn them back on, do any input like
|
|
||||||
// moving the mouse or pressing any other key.
|
|
||||||
Mod+Shift+P { power-off-monitors; }
|
|
||||||
}
|
|
|
@ -1,284 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
hostname,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
niriVars =
|
|
||||||
{
|
|
||||||
picard = {
|
|
||||||
floating-gptel = {
|
|
||||||
rows = "60";
|
|
||||||
cols = "150";
|
|
||||||
};
|
|
||||||
floating-btop = {
|
|
||||||
rows = "60";
|
|
||||||
cols = "210";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
kirk = {
|
|
||||||
floating-gptel = {
|
|
||||||
rows = "40";
|
|
||||||
cols = "140";
|
|
||||||
};
|
|
||||||
floating-btop = {
|
|
||||||
rows = "40";
|
|
||||||
cols = "140";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
."${hostname}" or {
|
|
||||||
floating-gptel = {
|
|
||||||
rows = "40";
|
|
||||||
cols = "140";
|
|
||||||
};
|
|
||||||
floating-btop = {
|
|
||||||
rows = "40";
|
|
||||||
cols = "140";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
run-floating-gptel =
|
|
||||||
with niriVars.floating-gptel;
|
|
||||||
pkgs.writeScriptBin "run-floating-gptel" ''
|
|
||||||
emacsclient -c --eval '(switch-to-buffer (gptel "*GptEl*"))' -F '((name . "GPTel - Emacs") (width . ${cols}) (height . ${rows}))'
|
|
||||||
'';
|
|
||||||
run-floating-btop =
|
|
||||||
with niriVars.floating-btop;
|
|
||||||
pkgs.writeScriptBin "run-floating-btop" ''
|
|
||||||
foot --title='bTop' -W ${cols}x${rows} btop
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
niri
|
|
||||||
waypaper
|
|
||||||
xwayland-satellite
|
|
||||||
run-floating-gptel
|
|
||||||
run-floating-btop
|
|
||||||
];
|
|
||||||
systemd.user.targets.niri-session = {
|
|
||||||
Unit = {
|
|
||||||
Description = "Niri session";
|
|
||||||
BindsTo = [ "graphical-session.target" ];
|
|
||||||
Wants = [
|
|
||||||
"graphical-session-pre.target"
|
|
||||||
"xdg-desktop-autostart.target"
|
|
||||||
];
|
|
||||||
After = [ "graphical-session-pre.target" ];
|
|
||||||
Before = [ "xdg-desktop-autostart.target" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.file."${config.xdg.configHome}/niri/wallpaper.png" = {
|
|
||||||
source = ../hyprland/wallpaper.png;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.activation.linkNiriConfig = lib.hm.dag.entryAnywhere ''
|
|
||||||
if [ ! -e "$HOME/.config/niri/config.kdl" ]; then
|
|
||||||
$DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/niri/config.kdl" "$HOME/.config/niri/config.kdl"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
DISPLAY = ":0";
|
|
||||||
QT_QPA_PLATFORM = "wayland";
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.rofi = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.rofi-wayland;
|
|
||||||
theme =
|
|
||||||
let
|
|
||||||
inherit (config.lib.formats.rasi) mkLiteral;
|
|
||||||
cfg = config.catppuccin.fzf;
|
|
||||||
palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${cfg.flavor}.colors;
|
|
||||||
selectColor = color: palette.${color}.hex;
|
|
||||||
|
|
||||||
in
|
|
||||||
lib.mkForce {
|
|
||||||
"*" = {
|
|
||||||
# blue = mkLiteral "#0000FF";
|
|
||||||
# white = mkLiteral "#FFFFFF";
|
|
||||||
# black = mkLiteral "#000000";
|
|
||||||
# grey = mkLiteral "#eeeeee";
|
|
||||||
|
|
||||||
blue = mkLiteral (selectColor "blue");
|
|
||||||
white = mkLiteral "#FFFFFF";
|
|
||||||
black = mkLiteral "#000000";
|
|
||||||
grey = mkLiteral "#eeeeee";
|
|
||||||
|
|
||||||
spacing = 2;
|
|
||||||
background-color = mkLiteral "#00000000";
|
|
||||||
border-color = mkLiteral "#444444FF";
|
|
||||||
anchor = mkLiteral "north";
|
|
||||||
location = mkLiteral "center";
|
|
||||||
};
|
|
||||||
|
|
||||||
"window" = {
|
|
||||||
transparency = "real";
|
|
||||||
background-color = mkLiteral "#00000000";
|
|
||||||
border = 0;
|
|
||||||
padding = mkLiteral "0% 0% 1em 0%";
|
|
||||||
x-offset = 0;
|
|
||||||
y-offset = mkLiteral "-10%";
|
|
||||||
};
|
|
||||||
|
|
||||||
"mainbox" = {
|
|
||||||
padding = mkLiteral "0px";
|
|
||||||
border = 0;
|
|
||||||
spacing = mkLiteral "1%";
|
|
||||||
};
|
|
||||||
|
|
||||||
"message" = {
|
|
||||||
border = 0;
|
|
||||||
border-radius = mkLiteral "4px";
|
|
||||||
padding = mkLiteral "1em";
|
|
||||||
background-color = mkLiteral "@white";
|
|
||||||
text-color = mkLiteral "@black";
|
|
||||||
};
|
|
||||||
|
|
||||||
"textbox normal" = {
|
|
||||||
text-color = mkLiteral "#002B36FF";
|
|
||||||
padding = 0;
|
|
||||||
border = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
"listview" = {
|
|
||||||
fixed-height = 1;
|
|
||||||
border = 0;
|
|
||||||
padding = mkLiteral "1em";
|
|
||||||
reverse = false;
|
|
||||||
border-radius = mkLiteral "4px";
|
|
||||||
|
|
||||||
columns = 1;
|
|
||||||
background-color = mkLiteral "@white";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element" = {
|
|
||||||
border = 0;
|
|
||||||
padding = mkLiteral "2px";
|
|
||||||
highlight = mkLiteral "bold";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element-text" = {
|
|
||||||
background-color = mkLiteral "inherit";
|
|
||||||
text-color = mkLiteral "inherit";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element normal.normal" = {
|
|
||||||
text-color = mkLiteral "#002B36FF";
|
|
||||||
background-color = mkLiteral "#F5F5F500";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element normal.urgent" = {
|
|
||||||
text-color = mkLiteral "#D75F00FF";
|
|
||||||
background-color = mkLiteral "#F5F5F5FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element normal.active" = {
|
|
||||||
text-color = mkLiteral "#005F87FF";
|
|
||||||
background-color = mkLiteral "#F5F5F5FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element selected.normal" = {
|
|
||||||
text-color = mkLiteral "#F5F5F5FF";
|
|
||||||
background-color = mkLiteral "#4271AEFF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element selected.urgent" = {
|
|
||||||
text-color = mkLiteral "#F5F5F5FF";
|
|
||||||
background-color = mkLiteral "#D75F00FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element selected.active" = {
|
|
||||||
text-color = mkLiteral "#F5F5F5FF";
|
|
||||||
background-color = mkLiteral "#005F87FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element alternate.normal" = {
|
|
||||||
text-color = mkLiteral "#002B36FF";
|
|
||||||
background-color = mkLiteral "#D0D0D0FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element alternate.urgent" = {
|
|
||||||
text-color = mkLiteral "#D75F00FF";
|
|
||||||
background-color = mkLiteral "#D0D0D0FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"element alternate.active" = {
|
|
||||||
text-color = mkLiteral "#005F87FF";
|
|
||||||
background-color = mkLiteral "#D0D0D0FF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"scrollbar" = {
|
|
||||||
border = 0;
|
|
||||||
padding = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
"inputbar" = {
|
|
||||||
spacing = 0;
|
|
||||||
border = 0;
|
|
||||||
padding = mkLiteral "0.5em 1em";
|
|
||||||
background-color = mkLiteral "@grey";
|
|
||||||
index = 0;
|
|
||||||
|
|
||||||
border-radius = mkLiteral "4px";
|
|
||||||
|
|
||||||
children = map mkLiteral [
|
|
||||||
"prompt"
|
|
||||||
"textbox-prompt-colon"
|
|
||||||
"entry"
|
|
||||||
"case-indicator"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"inputbar normal" = {
|
|
||||||
foreground-color = mkLiteral "#002B36FF";
|
|
||||||
background-color = mkLiteral "#F5F5F500";
|
|
||||||
};
|
|
||||||
|
|
||||||
"mode-switcher" = {
|
|
||||||
border = 0;
|
|
||||||
padding = mkLiteral "0.5em 1em";
|
|
||||||
background-color = mkLiteral "@grey";
|
|
||||||
index = 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
"button selected" = {
|
|
||||||
text-color = mkLiteral "#4271AEFF";
|
|
||||||
};
|
|
||||||
|
|
||||||
"textbox-prompt-colon" = {
|
|
||||||
expand = false;
|
|
||||||
str = ":";
|
|
||||||
margin = mkLiteral "0px 0.3em 0em 0em";
|
|
||||||
text-color = mkLiteral "@black";
|
|
||||||
};
|
|
||||||
|
|
||||||
"error-message" = {
|
|
||||||
border = 0;
|
|
||||||
border-radius = mkLiteral "4px";
|
|
||||||
padding = mkLiteral "1em";
|
|
||||||
background-color = mkLiteral "#FF8888";
|
|
||||||
text-color = mkLiteral "@black";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
extraConfig = {
|
|
||||||
modi = "drun,window,ssh";
|
|
||||||
combi-modes = [
|
|
||||||
"drun"
|
|
||||||
"window"
|
|
||||||
"ssh"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
font = "Iosevka Comfy 12";
|
|
||||||
terminal = "footclient";
|
|
||||||
pass = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.rofi-pass-wayland;
|
|
||||||
};
|
|
||||||
plugins = [ pkgs.rofi-calc ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,27 +1,13 @@
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
{
|
{
|
||||||
services.pantalaimon = {
|
services.pantalaimon = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.pantalaimon.overrideAttrs {
|
|
||||||
pytestCheckPhase = "echo skip pytest";
|
|
||||||
};
|
|
||||||
settings = {
|
settings = {
|
||||||
Default = {
|
|
||||||
LogLevel = "Debug";
|
|
||||||
SSL = true;
|
|
||||||
};
|
|
||||||
local-matrix = {
|
local-matrix = {
|
||||||
Homeserver = "https://matrix.aciceri.dev";
|
Homeserver = "https://nixos.dev";
|
||||||
# Homeserver = "https://matrix.nixos.dev/_matrix/client";
|
ListenAddress = "127.0.0.1";
|
||||||
# Homeserver = "https://matrix.nixos.dev";
|
|
||||||
ListenAddress = "localhost";
|
|
||||||
ListenPort = 8008;
|
ListenPort = 8008;
|
||||||
# SSL = false;
|
|
||||||
UseKeyring = false;
|
|
||||||
# IgnoreVerification = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.services.pantalaimon.Unit.Requires = [ "dbus.socket" ];
|
systemd.user.services.pantalaimon.Unit.Requires = [ "dbus.socket" ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [
|
||||||
(builtins.getFlake "github:NixOS/nixpkgs/063dece00c5a77e4a0ea24e5e5a5bd75232806f8")
|
pkgs.sdrangel
|
||||||
.legacyPackages.${pkgs.system}.sdrangel
|
|
||||||
pkgs.kdePackages.qtlocation
|
pkgs.kdePackages.qtlocation
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
|
|
||||||
"palette": {
|
|
||||||
"os": "#ACB0BE",
|
|
||||||
"closer": "p:os",
|
|
||||||
"pink": "#F5C2E7",
|
|
||||||
"lavender": "#B4BEFE",
|
|
||||||
"blue": "#89B4FA"
|
|
||||||
},
|
|
||||||
"blocks": [
|
|
||||||
{
|
|
||||||
"alignment": "left",
|
|
||||||
"segments": [
|
|
||||||
{
|
|
||||||
"foreground": "p:blue",
|
|
||||||
"style": "plain",
|
|
||||||
"template": "{{ .UserName }}@{{ .HostName }} ",
|
|
||||||
"type": "session"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"foreground": "p:pink",
|
|
||||||
"properties": {
|
|
||||||
"folder_icon": "..\ue5fe..",
|
|
||||||
"home_icon": "~",
|
|
||||||
"style": "agnoster_short"
|
|
||||||
},
|
|
||||||
"style": "plain",
|
|
||||||
"template": "{{ .Path }} ",
|
|
||||||
"type": "path"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"foreground": "p:lavender",
|
|
||||||
"properties": {
|
|
||||||
"branch_icon": "\ue725 ",
|
|
||||||
"cherry_pick_icon": "\ue29b ",
|
|
||||||
"commit_icon": "\uf417 ",
|
|
||||||
"fetch_status": false,
|
|
||||||
"fetch_upstream_icon": false,
|
|
||||||
"merge_icon": "\ue727 ",
|
|
||||||
"no_commits_icon": "\uf0c3 ",
|
|
||||||
"rebase_icon": "\ue728 ",
|
|
||||||
"revert_icon": "\uf0e2 ",
|
|
||||||
"tag_icon": "\uf412 "
|
|
||||||
},
|
|
||||||
"template": "{{ .HEAD }} ",
|
|
||||||
"style": "plain",
|
|
||||||
"type": "git"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"style": "plain",
|
|
||||||
"foreground": "p:closer",
|
|
||||||
"template": "\uf105",
|
|
||||||
"type": "text"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"type": "prompt"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"final_space": true,
|
|
||||||
"version": 3
|
|
||||||
}
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
programs.lsd = {
|
programs.lsd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
enableAliases = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.vim.enable = true;
|
programs.vim.enable = true;
|
||||||
|
@ -55,7 +56,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.atuin = {
|
programs.atuin = {
|
||||||
enable = false; # FIXME broken on bash: https://github.com/nix-community/home-manager/issues/5958
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
daemon = {
|
daemon = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
|
@ -63,65 +64,41 @@
|
||||||
};
|
};
|
||||||
auto_sync = true;
|
auto_sync = true;
|
||||||
sync_frequency = "5m";
|
sync_frequency = "5m";
|
||||||
sync_address = "http://sisko.wg.aciceri.dev:8889";
|
sync_address = "http://sisko.fleet:8889";
|
||||||
search_mode = "fuzzy";
|
search_mode = "fuzzy";
|
||||||
style = "compact";
|
style = "compact";
|
||||||
enter_accept = "true";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.bash = {
|
programs.fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
initExtra = lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
plugins = [
|
||||||
export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
# {
|
||||||
'';
|
# name = "fifc";
|
||||||
|
# src = pkgs.fishPlugins.fifc.src;
|
||||||
|
# }
|
||||||
|
{
|
||||||
|
name = "z";
|
||||||
|
src = pkgs.fishPlugins.z.src;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
shellInit =
|
||||||
|
''
|
||||||
|
# fish_vi_key_bindings
|
||||||
|
fish_default_key_bindings
|
||||||
|
''
|
||||||
|
+ lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
||||||
|
export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
||||||
|
'';
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
"cat" = "bat";
|
"cat" = "bat";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.zoxide.enable = true;
|
|
||||||
programs.thefuck.enable = true;
|
|
||||||
programs.oh-my-posh = {
|
|
||||||
enable = true;
|
|
||||||
# same as "captuccin_mocha" but without the OS logo
|
|
||||||
settings = lib.mkForce (
|
|
||||||
builtins.fromJSON (
|
|
||||||
builtins.unsafeDiscardStringContext (builtins.readFile ./catppuccin_mocha.omp.json)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.zellij.enableBashIntegration = false;
|
|
||||||
|
|
||||||
# programs.fish = {
|
|
||||||
# enable = true;
|
|
||||||
# plugins = [
|
|
||||||
# # {
|
|
||||||
# # name = "fifc";
|
|
||||||
# # src = pkgs.fishPlugins.fifc.src;
|
|
||||||
# # }
|
|
||||||
# {
|
|
||||||
# name = "z";
|
|
||||||
# src = pkgs.fishPlugins.z.src;
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
# shellInit =
|
|
||||||
# ''
|
|
||||||
# # fish_vi_key_bindings
|
|
||||||
# fish_default_key_bindings
|
|
||||||
# ''
|
|
||||||
# + lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
|
||||||
# export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
|
||||||
# '';
|
|
||||||
# shellAliases = {
|
|
||||||
# "cat" = "bat";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
home.packages =
|
home.packages =
|
||||||
with pkgs;
|
with pkgs;
|
||||||
[
|
[
|
||||||
|
thefuck
|
||||||
dig.dnsutils
|
dig.dnsutils
|
||||||
lsof
|
lsof
|
||||||
comma
|
comma
|
||||||
|
|
|
@ -9,18 +9,18 @@ in
|
||||||
{
|
{
|
||||||
home.packages = [ spotify-adblocked ];
|
home.packages = [ spotify-adblocked ];
|
||||||
|
|
||||||
# systemd.user.services.spotify-adblocked = {
|
systemd.user.services.spotify-adblocked = {
|
||||||
# Install.WantedBy = [ "graphical-session.target" ];
|
Install.WantedBy = [ "graphical-session.target" ];
|
||||||
|
|
||||||
# Unit = {
|
Unit = {
|
||||||
# Description = "Spotify";
|
Description = "Spotify";
|
||||||
# PartOf = [ "graphical-session.target" ];
|
PartOf = [ "graphical-session.target" ];
|
||||||
# };
|
};
|
||||||
|
|
||||||
# Service = {
|
Service = {
|
||||||
# ExecStart = lib.getExe spotify-adblocked;
|
ExecStart = lib.getExe spotify-adblocked;
|
||||||
# Restart = "on-failure";
|
Restart = "on-failure";
|
||||||
# RestartSec = 3;
|
RestartSec = 3;
|
||||||
# };
|
};
|
||||||
# };
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,4 +48,10 @@
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Otherwise it will start only after Sway and will not work with Hyprland
|
||||||
|
systemd.user.services.swayidle = {
|
||||||
|
Unit.PartOf = lib.mkForce [ ];
|
||||||
|
Install.WantedBy = lib.mkForce [ "hyprland-session.target" ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,10 +16,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
Service = {
|
Service = {
|
||||||
ExecStart = pkgs.writeShellScript "start-tremotesf.sh" ''
|
ExecStart = "${lib.getExe pkgs.tremotesf} --minimized";
|
||||||
sleep 5
|
|
||||||
${lib.getExe pkgs.tremotesf} --minimized
|
|
||||||
'';
|
|
||||||
Restart = "on-failure";
|
Restart = "on-failure";
|
||||||
RestartSec = 3;
|
RestartSec = 3;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
{
|
|
||||||
"layer": "top",
|
|
||||||
"position": "left",
|
|
||||||
"width": 36,
|
|
||||||
"margin": "12 0 12 0",
|
|
||||||
"spacing": 2,
|
|
||||||
"modules-left": ["clock", "custom/sep", "niri/window"],
|
|
||||||
"modules-center": ["niri/workspaces"],
|
|
||||||
"modules-right": [
|
|
||||||
"tray",
|
|
||||||
"custom/sep",
|
|
||||||
"temperature",
|
|
||||||
"custom/sep",
|
|
||||||
"pulseaudio",
|
|
||||||
"custom/powermenu"
|
|
||||||
],
|
|
||||||
"custom/sep": {
|
|
||||||
"format": "──"
|
|
||||||
// "format": ""
|
|
||||||
},
|
|
||||||
"custom/powermenu": {
|
|
||||||
"on-click": "rofi -show menu -modi menu:rofi-power-menu",
|
|
||||||
"format": "",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
"niri/workspaces": {
|
|
||||||
"format": "{icon}",
|
|
||||||
"on-click": "activate",
|
|
||||||
"format-icons": {
|
|
||||||
"active": "",
|
|
||||||
"urgent": "",
|
|
||||||
"default": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"niri/window": {
|
|
||||||
"rotate": 90,
|
|
||||||
"rewrite": {
|
|
||||||
"(.*) — Mozilla Firefox": " $1",
|
|
||||||
"(.*) - Emacs": " $1",
|
|
||||||
"(.*) - Slack": " $1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"clock": {
|
|
||||||
"tooltip": true,
|
|
||||||
"format": "{:%H\n%M}",
|
|
||||||
"tooltip-format": "{:%Y-%m-%d}"
|
|
||||||
},
|
|
||||||
"tray": {
|
|
||||||
"icon-size": 20,
|
|
||||||
"spacing": 5,
|
|
||||||
"show-passive-items": "false"
|
|
||||||
},
|
|
||||||
"temperature": {
|
|
||||||
"rotate": 90,
|
|
||||||
"hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
|
||||||
"critical-threshold": 80,
|
|
||||||
"format": "{icon} {temperatureC}°C",
|
|
||||||
"format-icons": ["", "", ""]
|
|
||||||
},
|
|
||||||
"pulseaudio": {
|
|
||||||
"rotate": 90,
|
|
||||||
"format": "{icon} {volume}%",
|
|
||||||
"format-bluetooth": "{icon} {volume}%",
|
|
||||||
"format-muted": "MUTE ",
|
|
||||||
"format-icons": {
|
|
||||||
"headphones": "",
|
|
||||||
"handsfree": "",
|
|
||||||
"headset": "",
|
|
||||||
"phone": "",
|
|
||||||
"portable": "",
|
|
||||||
"car": "",
|
|
||||||
"default": ["", ""]
|
|
||||||
},
|
|
||||||
"scroll-step": 3,
|
|
||||||
"on-click": "pavucontrol",
|
|
||||||
"on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -7,19 +7,140 @@
|
||||||
programs.waybar = {
|
programs.waybar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd.enable = true;
|
systemd.enable = true;
|
||||||
|
style = builtins.readFile ./style.css;
|
||||||
|
settings = {
|
||||||
|
mainBar = {
|
||||||
|
ipc = true;
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
height = 30;
|
||||||
|
|
||||||
|
modules-left = [
|
||||||
|
"wlr/mode"
|
||||||
|
"hyprland/workspaces"
|
||||||
|
];
|
||||||
|
modules-center = [ "wlr/window" ];
|
||||||
|
modules-right = [
|
||||||
|
"network"
|
||||||
|
"tray"
|
||||||
|
"pulseaudio"
|
||||||
|
"cpu"
|
||||||
|
"memory"
|
||||||
|
"temperature"
|
||||||
|
"backlight"
|
||||||
|
"battery"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
|
||||||
|
"hyprland/workspaces" = {
|
||||||
|
all-outputs = true;
|
||||||
|
disable-scroll-wraparound = true;
|
||||||
|
# format = "{icon}";
|
||||||
|
on-click = "activate";
|
||||||
|
# format-icons = {
|
||||||
|
# "1" = "";
|
||||||
|
# "2" = "";
|
||||||
|
# "3" = "";
|
||||||
|
# "9" = "ﬧ";
|
||||||
|
# urgent = "";
|
||||||
|
# };
|
||||||
|
# sort-by-number = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"wlr/mode" = {
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"wlr/window" = {
|
||||||
|
max_length = 50;
|
||||||
|
};
|
||||||
|
tray = {
|
||||||
|
spacing = 10;
|
||||||
|
};
|
||||||
|
battery = {
|
||||||
|
format = "{capacity}% {icon}";
|
||||||
|
format-alt = "{time} {icon}";
|
||||||
|
format-charging = "{capacity}% ";
|
||||||
|
format-icons = [
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
];
|
||||||
|
format-plugged = "{capacity}% ";
|
||||||
|
states = {
|
||||||
|
critical = 15;
|
||||||
|
warning = 30;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
clock = {
|
||||||
|
format-alt = "{:%Y-%m-%d}";
|
||||||
|
tooltip-format = "{:%Y-%m-%d | %H:%M}";
|
||||||
|
};
|
||||||
|
cpu = {
|
||||||
|
format = "{usage}% ";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
memory = {
|
||||||
|
format = "{}% ";
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
interval = 1;
|
||||||
|
format-alt = "{ifname}: {ipaddr}/{cidr}";
|
||||||
|
format-disconnected = "Disconnected ⚠";
|
||||||
|
format-ethernet = "{ifname}: {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}";
|
||||||
|
format-linked = "{ifname} (No IP) ";
|
||||||
|
format-wifi = "{essid} ({signalStrength}%) {ipaddr}/{cidr} up: {bandwidthUpBits:>4} down: {bandwidthDownBits:>4}";
|
||||||
|
};
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{volume}% {icon} {format_source}";
|
||||||
|
format-bluetooth = "{volume}% {icon} {format_source}";
|
||||||
|
format-bluetooth-muted = " {icon} {format_source}";
|
||||||
|
format-icons = {
|
||||||
|
car = "";
|
||||||
|
default = [
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
];
|
||||||
|
handsfree = "";
|
||||||
|
headphones = " ";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
portable = "";
|
||||||
|
};
|
||||||
|
format-muted = " {format_source}";
|
||||||
|
format-source = "{volume}% ";
|
||||||
|
format-source-muted = "";
|
||||||
|
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
};
|
||||||
|
"wlr/mode" = {
|
||||||
|
format = ''<span style="italic">{}</span>'';
|
||||||
|
};
|
||||||
|
temperature = {
|
||||||
|
critical-threshold = 80;
|
||||||
|
format = "{temperatureC}°C {icon}";
|
||||||
|
format-icons = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; # picard FIXME
|
||||||
|
# hwmon-path = "/sys/class/thermal/thermal_zone4/temp"; # thinkpad
|
||||||
|
};
|
||||||
|
backlight = {
|
||||||
|
device = "ddcci2";
|
||||||
|
format = "{percent}% {icon}";
|
||||||
|
format-icons = [
|
||||||
|
" "
|
||||||
|
" "
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
catppuccin.waybar.enable = lib.mkForce false;
|
# waybar needs the hyprctl binary in PATH when started in hyprland
|
||||||
|
systemd.user.services.waybar.Service.Environment = "PATH=${lib.makeBinPath [ pkgs.hyprland ]}";
|
||||||
home.activation.linkWaybarConfig = lib.hm.dag.entryAnywhere ''
|
|
||||||
if [ ! -d "$HOME/.config/waybar" ]; then
|
|
||||||
$DRY_RUN_CMD mkdir -p "$HOME/.config/waybar"
|
|
||||||
$DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/config.json" "$HOME/.config/waybar/config"
|
|
||||||
$DRY_RUN_CMD ln -s "$HOME/projects/aciceri/nixfleet/hmModules/waybar/style.css" "$HOME/.config/waybar/style.css"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
rofi-power-menu
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,71 +1,54 @@
|
||||||
* {
|
* {
|
||||||
border: none;
|
border: none;
|
||||||
font-family: "Iosevka Comfy", "FontAwesome", "Nerd Font";
|
border-radius: 0;
|
||||||
font-size: 1.35rem;
|
min-height: 0;
|
||||||
font-weight: 600;
|
font-family: Fira Code;
|
||||||
background: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window#waybar {
|
window#waybar {
|
||||||
color: #a5adcb;
|
background: rgba(255, 255, 255, 0.05);
|
||||||
background-color: #181926;
|
color: white;
|
||||||
|
font-size: 1.2rem;
|
||||||
border-top-right-radius: 5px;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
}
|
|
||||||
.modules-left,
|
|
||||||
.modules-right,
|
|
||||||
.modules-center {
|
|
||||||
padding: 12px 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tooltip {
|
|
||||||
color: #a5adcb;
|
|
||||||
background-color: #181926;
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
tooltip * {
|
|
||||||
color: #a5adcb;
|
|
||||||
text-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-sep {
|
|
||||||
color: #494d64;
|
|
||||||
}
|
|
||||||
#workspaces button:hover {
|
|
||||||
box-shadow: inherit;
|
|
||||||
text-shadow: inherit;
|
|
||||||
}
|
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
color: #5b6078;
|
padding: 0 10px;
|
||||||
background: none;
|
background: transparent;
|
||||||
padding: 0;
|
color: white;
|
||||||
}
|
font-size: 2rem;
|
||||||
#workspaces button:hover {
|
|
||||||
color: #a6da95;
|
|
||||||
}
|
|
||||||
#workspaces button.active {
|
|
||||||
color: #f5bde6;
|
|
||||||
}
|
|
||||||
#temperature {
|
|
||||||
color: #eed49f;
|
|
||||||
}
|
|
||||||
#clock {
|
|
||||||
font-weight: 600;
|
|
||||||
color: #8bd5ca;
|
|
||||||
}
|
|
||||||
#custom-bluetooth_devices {
|
|
||||||
color: #8aadf4;
|
|
||||||
}
|
|
||||||
#pulseaudio {
|
|
||||||
color: #a6da95;
|
|
||||||
}
|
|
||||||
#pulseaudio.muted {
|
|
||||||
color: #ed8796;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#custom-powermenu {
|
#workspaces button.active {
|
||||||
margin: 12px 0 0 0;
|
box-shadow: inset 0 -5px red;
|
||||||
color: #6e738d;
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused,
|
||||||
|
#workspaces button:hover {
|
||||||
|
box-shadow: inset 0 -5px white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
/* background: @theme_fg_color; */
|
||||||
|
/* color: @theme_selected_bg_color; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
margin: 0 4px;
|
||||||
|
padding: 0 4px;
|
||||||
|
/* background: @theme_fg_color; */
|
||||||
|
/* color: @unfocused_borders; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio,
|
||||||
|
#network,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#temperature,
|
||||||
|
#battery,
|
||||||
|
#language,
|
||||||
|
#clock,
|
||||||
|
#tray {
|
||||||
|
margin: 0 4px;
|
||||||
|
padding: 0 2px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,29 +28,6 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
portal = {
|
|
||||||
enable = true;
|
|
||||||
configPackages = with pkgs; [
|
|
||||||
# xdg-desktop-portal-wlr
|
|
||||||
# xdg-desktop-portal-gtk
|
|
||||||
# xdg-desktop-portal-hyprland
|
|
||||||
xdg-desktop-portal-gnome
|
|
||||||
# xdg-desktop-portal
|
|
||||||
# kdePackages.xdg-desktop-portal-kde
|
|
||||||
# libsForQt5.xdg-desktop-portal-kde
|
|
||||||
gnome-keyring
|
|
||||||
];
|
|
||||||
extraPortals = with pkgs; [
|
|
||||||
# xdg-desktop-portal-wlr
|
|
||||||
# xdg-desktop-portal-gtk
|
|
||||||
# xdg-desktop-portal-hyprland
|
|
||||||
xdg-desktop-portal-gnome
|
|
||||||
# xdg-desktop-portal
|
|
||||||
# kdePackages.xdg-desktop-portal-kde
|
|
||||||
gnome-keyring
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
home.packages = [ pkgs.xdg-utils ];
|
home.packages = [ pkgs.xdg-utils ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ let
|
||||||
url = "https://github.com/dj95/zjstatus/releases/download/v0.17.0/zjstatus.wasm";
|
url = "https://github.com/dj95/zjstatus/releases/download/v0.17.0/zjstatus.wasm";
|
||||||
hash = "sha256-IgTfSl24Eap+0zhfiwTvmdVy/dryPxfEF7LhVNVXe+U=";
|
hash = "sha256-IgTfSl24Eap+0zhfiwTvmdVy/dryPxfEF7LhVNVXe+U=";
|
||||||
};
|
};
|
||||||
cfg = config.catppuccin.fzf;
|
cfg = config.programs.fzf.catppuccin;
|
||||||
palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${cfg.flavor}.colors;
|
palette = (lib.importJSON "${config.catppuccin.sources.palette}/palette.json").${cfg.flavor}.colors;
|
||||||
selectColor = color: palette.${color}.hex;
|
selectColor = color: palette.${color}.hex;
|
||||||
color_fg = selectColor "text";
|
color_fg = selectColor "text";
|
||||||
|
@ -99,6 +99,7 @@ in
|
||||||
{
|
{
|
||||||
programs.zellij = {
|
programs.zellij = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
enableFishIntegration = false;
|
||||||
settings = {
|
settings = {
|
||||||
default_layout = "${layout}";
|
default_layout = "${layout}";
|
||||||
pane_frames = false;
|
pane_frames = false;
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [ pkgs.zoom-us ];
|
|
||||||
}
|
|
|
@ -14,22 +14,20 @@
|
||||||
deltaflyer = {
|
deltaflyer = {
|
||||||
nixpkgs =
|
nixpkgs =
|
||||||
let
|
let
|
||||||
# keep in sync with https://github.com/mobile-nixos/mobile-nixos/blob/development/npins/sources.json
|
# keep in sync with https://github.com/NixOS/mobile-nixos/blob/development/pkgs.nix
|
||||||
rev = "d3c42f187194c26d9f0309a8ecc469d6c878ce33";
|
rev = "44d0940ea560dee511026a53f0e2e2cde489b4d4";
|
||||||
in
|
in
|
||||||
builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
||||||
extraHmModules = [
|
extraHmModules = [
|
||||||
inputs.catppuccin.homeModules.catppuccin
|
# inputs.ccrEmacs.hmModules.default
|
||||||
];
|
];
|
||||||
vpn = {
|
vpn = {
|
||||||
ip = "10.100.0.5";
|
ip = "10.100.0.5";
|
||||||
publicKey = "6bzmBx2b5yzMdW0aK0KapoBesNcxTv5+qdo+pGmG+jc=";
|
publicKey = "6bzmBx2b5yzMdW0aK0KapoBesNcxTv5+qdo+pGmG+jc=";
|
||||||
};
|
};
|
||||||
# homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e";
|
homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e";
|
||||||
extraModules = [
|
extraModules = [
|
||||||
(import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-fajita"; })
|
(import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-fajita"; })
|
||||||
inputs.catppuccin.nixosModules.catppuccin
|
|
||||||
inputs.lix-module.nixosModules.default
|
|
||||||
];
|
];
|
||||||
secrets = {
|
secrets = {
|
||||||
"deltaflyer-wireguard-private-key" = { };
|
"deltaflyer-wireguard-private-key" = { };
|
||||||
|
@ -50,7 +48,7 @@
|
||||||
];
|
];
|
||||||
extraHmModules = [
|
extraHmModules = [
|
||||||
"${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix"
|
"${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix"
|
||||||
inputs.catppuccin.homeModules.catppuccin
|
inputs.catppuccin.homeManagerModules.catppuccin
|
||||||
];
|
];
|
||||||
secrets = {
|
secrets = {
|
||||||
"kirk-wireguard-private-key" = { };
|
"kirk-wireguard-private-key" = { };
|
||||||
|
@ -69,14 +67,16 @@
|
||||||
};
|
};
|
||||||
extraModules = [
|
extraModules = [
|
||||||
inputs.disko.nixosModules.disko
|
inputs.disko.nixosModules.disko
|
||||||
|
inputs.nixThePlanet.nixosModules.macos-ventura
|
||||||
inputs.lix-module.nixosModules.default
|
inputs.lix-module.nixosModules.default
|
||||||
inputs.lanzaboote.nixosModules.lanzaboote
|
inputs.lanzaboote.nixosModules.lanzaboote
|
||||||
inputs.catppuccin.nixosModules.catppuccin
|
inputs.catppuccin.nixosModules.catppuccin
|
||||||
];
|
];
|
||||||
extraHmModules = [
|
extraHmModules = [
|
||||||
|
# inputs.ccrEmacs.hmModules.default
|
||||||
"${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix"
|
"${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix"
|
||||||
inputs.vscode-server.nixosModules.home
|
inputs.vscode-server.nixosModules.home
|
||||||
inputs.catppuccin.homeModules.catppuccin
|
inputs.catppuccin.homeManagerModules.catppuccin
|
||||||
];
|
];
|
||||||
secrets = {
|
secrets = {
|
||||||
"picard-wireguard-private-key" = { };
|
"picard-wireguard-private-key" = { };
|
||||||
|
@ -92,7 +92,6 @@
|
||||||
|
|
||||||
sisko = {
|
sisko = {
|
||||||
system = "aarch64-linux";
|
system = "aarch64-linux";
|
||||||
nixpkgs = inputs.nixpkgsSisko;
|
|
||||||
enableHomeManager = false;
|
enableHomeManager = false;
|
||||||
vpn = {
|
vpn = {
|
||||||
ip = "10.100.0.1";
|
ip = "10.100.0.1";
|
||||||
|
@ -117,33 +116,7 @@
|
||||||
owner = "grafana";
|
owner = "grafana";
|
||||||
group = "forgejo";
|
group = "forgejo";
|
||||||
};
|
};
|
||||||
"matrix-registration-shared-secret".owner = "matrix-synapse";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pike = {
|
|
||||||
vpn = {
|
|
||||||
ip = "10.100.0.8";
|
|
||||||
publicKey = "16ctjunXCXDPLSUhocstJ9z9l45/YuJFxlLkpoxChjI=";
|
|
||||||
};
|
|
||||||
extraModules = [
|
|
||||||
inputs.lix-module.nixosModules.default
|
|
||||||
inputs.catppuccin.nixosModules.catppuccin
|
|
||||||
];
|
|
||||||
extraHmModules = [
|
|
||||||
"${inputs.homeManagerGitWorkspace}/modules/services/git-workspace.nix"
|
|
||||||
inputs.vscode-server.nixosModules.home
|
|
||||||
inputs.catppuccin.homeModules.catppuccin
|
|
||||||
];
|
|
||||||
secrets = {
|
|
||||||
"pike-wireguard-private-key" = { };
|
|
||||||
"chatgpt-token".owner = "ccr";
|
|
||||||
"cachix-personal-token".owner = "ccr";
|
|
||||||
"git-workspace-tokens".owner = "ccr";
|
|
||||||
"autistici-password".owner = "ccr";
|
|
||||||
"restic-hetzner-password" = { };
|
|
||||||
"forgejo-runners-token".owner = "nixuser";
|
|
||||||
"forgejo-nix-access-tokens".owner = "nixuser";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,6 @@
|
||||||
# INSECURE STUFF FIRST
|
# INSECURE STUFF FIRST
|
||||||
# Users and hardcoded passwords.
|
# Users and hardcoded passwords.
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [
|
|
||||||
(prev: final: {
|
|
||||||
gcc7 = final.gcc;
|
|
||||||
gcc8 = final.gcc;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
users.users.root.password = "nixos";
|
users.users.root.password = "nixos";
|
||||||
# users.users.ccr.password = "1234";
|
# users.users.ccr.password = "1234";
|
||||||
|
|
||||||
|
@ -73,13 +66,11 @@
|
||||||
"git"
|
"git"
|
||||||
"shell"
|
"shell"
|
||||||
"helix"
|
"helix"
|
||||||
# "hyprland"
|
"hyprland"
|
||||||
"niri"
|
|
||||||
"emacs"
|
"emacs"
|
||||||
"firefox"
|
"firefox"
|
||||||
"mpv"
|
"mpv"
|
||||||
"xdg"
|
"xdg"
|
||||||
"catppuccin"
|
|
||||||
];
|
];
|
||||||
extraGroups = [
|
extraGroups = [
|
||||||
"dialout"
|
"dialout"
|
||||||
|
@ -108,18 +99,18 @@
|
||||||
ccr.extraModules = [
|
ccr.extraModules = [
|
||||||
{
|
{
|
||||||
programs.fish.loginShellInit = ''
|
programs.fish.loginShellInit = ''
|
||||||
pgrep niri >/dev/null || exec niri-session
|
pgrep Hypr >/dev/null || exec dbus-run-session Hyprland
|
||||||
|
'';
|
||||||
|
wayland.windowManager.hyprland.extraConfig = lib.mkAfter ''
|
||||||
|
monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1
|
||||||
|
input {
|
||||||
|
touchdevice {
|
||||||
|
transform = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bind = $mod, r, exec, rotate-screen hor
|
||||||
|
bind = $mod SHIFT, r, exec, rotate-screen ver
|
||||||
'';
|
'';
|
||||||
# wayland.windowManager.hyprland.extraConfig = lib.mkAfter ''
|
|
||||||
# monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1
|
|
||||||
# input {
|
|
||||||
# touchdevice {
|
|
||||||
# transform = 1
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
# bind = $mod, r, exec, rotate-screen hor
|
|
||||||
# bind = $mod SHIFT, r, exec, rotate-screen ver
|
|
||||||
# '';
|
|
||||||
home.packages =
|
home.packages =
|
||||||
let
|
let
|
||||||
rotateScript = pkgs.writeShellApplication {
|
rotateScript = pkgs.writeShellApplication {
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#
|
#
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
@ -17,38 +16,35 @@
|
||||||
|
|
||||||
# # desktopManager.plasma5.mobile.enable = true;
|
# # desktopManager.plasma5.mobile.enable = true;
|
||||||
|
|
||||||
displayManager.autoLogin = {
|
# displayManager.autoLogin = {
|
||||||
enable = true;
|
# enable = true;
|
||||||
user = "ccr";
|
# };
|
||||||
};
|
|
||||||
|
|
||||||
displayManager.session = [
|
# displayManager.session = [{
|
||||||
{
|
# manage = "desktop";
|
||||||
manage = "desktop";
|
# name = "hyprland";
|
||||||
name = "niri";
|
# start = ''
|
||||||
start = ''
|
# ${pkgs.hyprland}/bin/Hyprland &
|
||||||
${pkgs.niri}/bin/niri-session &
|
# waitPID=$!
|
||||||
waitPID=$!
|
# '';
|
||||||
'';
|
# }];
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
displayManager.defaultSession = "niri";
|
# displayManager.defaultSession = "hyprland";
|
||||||
|
|
||||||
displayManager.lightdm = {
|
# displayManager.lightdm = {
|
||||||
enable = true;
|
# enable = true;
|
||||||
# Workaround for autologin only working at first launch.
|
# # Workaround for autologin only working at first launch.
|
||||||
# A logout or session crashing will show the login screen otherwise.
|
# # A logout or session crashing will show the login screen otherwise.
|
||||||
extraSeatDefaults = ''
|
# extraSeatDefaults = ''
|
||||||
session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm
|
# session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm
|
||||||
'';
|
# '';
|
||||||
};
|
# };
|
||||||
|
|
||||||
libinput.enable = true;
|
libinput.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.bluetooth.enable = true;
|
hardware.bluetooth.enable = true;
|
||||||
hardware.pulseaudio.enable = lib.mkDefault false; # mkDefault to help out users wanting pipewire
|
hardware.pulseaudio.enable = lib.mkDefault true; # mkDefault to help out users wanting pipewire
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
networking.wireless.enable = false;
|
networking.wireless.enable = false;
|
||||||
powerManagement.enable = true;
|
powerManagement.enable = true;
|
||||||
|
|
|
@ -33,9 +33,8 @@
|
||||||
"adb"
|
"adb"
|
||||||
"binfmt"
|
"binfmt"
|
||||||
"prometheus-exporters"
|
"prometheus-exporters"
|
||||||
"alloy"
|
"promtail"
|
||||||
"syncthing"
|
"syncthing"
|
||||||
"zerotier"
|
|
||||||
]
|
]
|
||||||
++ [ ./disko.nix ];
|
++ [ ./disko.nix ];
|
||||||
|
|
||||||
|
@ -55,9 +54,9 @@
|
||||||
"password-store"
|
"password-store"
|
||||||
"slack"
|
"slack"
|
||||||
"hyprland"
|
"hyprland"
|
||||||
"niri"
|
|
||||||
"udiskie"
|
"udiskie"
|
||||||
"xdg"
|
"xdg"
|
||||||
|
"spotify"
|
||||||
"lutris"
|
"lutris"
|
||||||
"wine"
|
"wine"
|
||||||
"cura"
|
"cura"
|
||||||
|
@ -66,6 +65,7 @@
|
||||||
"digikam"
|
"digikam"
|
||||||
"discord"
|
"discord"
|
||||||
"remmina"
|
"remmina"
|
||||||
|
"zulip"
|
||||||
"calibre"
|
"calibre"
|
||||||
"zathura"
|
"zathura"
|
||||||
"imv"
|
"imv"
|
||||||
|
@ -74,11 +74,8 @@
|
||||||
"emacs"
|
"emacs"
|
||||||
"chirp"
|
"chirp"
|
||||||
"sdrangel"
|
"sdrangel"
|
||||||
"zmkbatx"
|
|
||||||
"moonlight"
|
|
||||||
"gimp"
|
|
||||||
];
|
];
|
||||||
extraGroups = [ "plugdev" ];
|
extraGroups = [ ];
|
||||||
backupPaths = [ ];
|
backupPaths = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -274,10 +274,11 @@ in
|
||||||
extraHmModules = config.extraHmModules;
|
extraHmModules = config.extraHmModules;
|
||||||
in
|
in
|
||||||
[
|
[
|
||||||
config.homeManager.nixosModules.home-manager
|
config.homeManager.nixosModule
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
@ -286,6 +287,7 @@ in
|
||||||
_module.args = {
|
_module.args = {
|
||||||
age = config.age or { };
|
age = config.age or { };
|
||||||
fleetFlake = self;
|
fleetFlake = self;
|
||||||
|
pkgsStable = inputs.nixpkgsStable.legacyPackages.${pkgs.system};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,13 +35,13 @@
|
||||||
"hass-poweroff"
|
"hass-poweroff"
|
||||||
"forgejo-runners"
|
"forgejo-runners"
|
||||||
"teamviewer"
|
"teamviewer"
|
||||||
# "macos-ventura"
|
"macos-ventura"
|
||||||
"sunshine"
|
"sunshine"
|
||||||
"mount-sisko"
|
"mount-sisko"
|
||||||
"adb"
|
"adb"
|
||||||
|
"guix"
|
||||||
"prometheus-exporters"
|
"prometheus-exporters"
|
||||||
"zerotier"
|
"promtail"
|
||||||
"alloy"
|
|
||||||
]
|
]
|
||||||
++ [ ./disko.nix ];
|
++ [ ./disko.nix ];
|
||||||
|
|
||||||
|
@ -63,7 +63,6 @@
|
||||||
"password-store"
|
"password-store"
|
||||||
"slack"
|
"slack"
|
||||||
"hyprland"
|
"hyprland"
|
||||||
"niri"
|
|
||||||
"udiskie"
|
"udiskie"
|
||||||
"xdg"
|
"xdg"
|
||||||
"spotify"
|
"spotify"
|
||||||
|
@ -77,7 +76,7 @@
|
||||||
"tor-browser"
|
"tor-browser"
|
||||||
"kicad"
|
"kicad"
|
||||||
"monero"
|
"monero"
|
||||||
# "zulip"
|
"zulip"
|
||||||
"teams"
|
"teams"
|
||||||
"obs-studio"
|
"obs-studio"
|
||||||
"calibre"
|
"calibre"
|
||||||
|
@ -93,12 +92,6 @@
|
||||||
"vial"
|
"vial"
|
||||||
"chirp"
|
"chirp"
|
||||||
"sdrangel"
|
"sdrangel"
|
||||||
"discord"
|
|
||||||
"ib-tws"
|
|
||||||
"zoom"
|
|
||||||
"pantalaimon"
|
|
||||||
"moonlight"
|
|
||||||
"gimp"
|
|
||||||
];
|
];
|
||||||
extraGroups = [ "plugdev" ];
|
extraGroups = [ "plugdev" ];
|
||||||
backupPaths = [ ];
|
backupPaths = [ ];
|
||||||
|
@ -120,21 +113,30 @@
|
||||||
"i2c-dev" # needed?
|
"i2c-dev" # needed?
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/328909
|
||||||
boot.extraModulePackages = [
|
boot.extraModulePackages = [
|
||||||
config.boot.kernelPackages.ddcci-driver
|
(config.boot.kernelPackages.ddcci-driver.overrideAttrs (old: {
|
||||||
|
patches = [ ];
|
||||||
|
src = pkgs.fetchFromGitLab {
|
||||||
|
owner = "${old.pname}-linux";
|
||||||
|
repo = "${old.pname}-linux";
|
||||||
|
rev = "7853cbfc28bc62e87db79f612568b25315397dd0";
|
||||||
|
hash = "sha256-QImfvYzMqyrRGyrS6I7ERYmteaTijd8ZRnC6+bA9OyM=";
|
||||||
|
};
|
||||||
|
}))
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.services.ddcci = {
|
# systemd.services.ddcci = {
|
||||||
script = ''
|
# script = ''
|
||||||
echo 'ddcci 0x37' > /sys/bus/i2c/devices/i2c-2/new_device
|
# echo 'ddcci 0x37' > /sys/bus/i2c/devices/i2c-2/new_device
|
||||||
'';
|
# '';
|
||||||
wantedBy = [ "graphical.target" ];
|
# wantedBy = [ "graphical.target" ];
|
||||||
restartIfChanged = false;
|
# restartIfChanged = false;
|
||||||
serviceConfig = {
|
# serviceConfig = {
|
||||||
Type = "oneshot";
|
# Type = "oneshot";
|
||||||
RemainAfterExit = true;
|
# RemainAfterExit = true;
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
boot.loader.systemd-boot = {
|
boot.loader.systemd-boot = {
|
||||||
|
@ -165,8 +167,6 @@
|
||||||
algorithm = "zstd";
|
algorithm = "zstd";
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.rtl-sdr.enable = true;
|
|
||||||
|
|
||||||
# TODO move away from here (how can the interface name be retrieved programmatically?)
|
# TODO move away from here (how can the interface name be retrieved programmatically?)
|
||||||
networking.interfaces.enp11s0.wakeOnLan = {
|
networking.interfaces.enp11s0.wakeOnLan = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
@ -1,172 +0,0 @@
|
||||||
{
|
|
||||||
fleetModules,
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
imports = fleetModules [
|
|
||||||
"common"
|
|
||||||
"ssh"
|
|
||||||
"ccr"
|
|
||||||
"nix"
|
|
||||||
"networkmanager"
|
|
||||||
"bluetooth"
|
|
||||||
"dbus"
|
|
||||||
"docker"
|
|
||||||
"fonts"
|
|
||||||
"qmk-udev"
|
|
||||||
"mosh"
|
|
||||||
"udisks2"
|
|
||||||
"xdg"
|
|
||||||
"pipewire"
|
|
||||||
"nix-development"
|
|
||||||
"waydroid"
|
|
||||||
"virt-manager"
|
|
||||||
"ssh-initrd"
|
|
||||||
"printing"
|
|
||||||
"pam"
|
|
||||||
"wireguard-client"
|
|
||||||
"binfmt"
|
|
||||||
"greetd"
|
|
||||||
# "syncthing"
|
|
||||||
"teamviewer"
|
|
||||||
"sunshine"
|
|
||||||
"mount-sisko"
|
|
||||||
"adb"
|
|
||||||
"prometheus-exporters"
|
|
||||||
"alloy"
|
|
||||||
"zerotier"
|
|
||||||
];
|
|
||||||
|
|
||||||
ccr = {
|
|
||||||
enable = true;
|
|
||||||
autologin = false;
|
|
||||||
modules = [
|
|
||||||
"git"
|
|
||||||
"git-workspace"
|
|
||||||
"helix"
|
|
||||||
"shell"
|
|
||||||
"zellij"
|
|
||||||
# "element"
|
|
||||||
"zmkbatx"
|
|
||||||
"tremotesf"
|
|
||||||
"firefox"
|
|
||||||
"gpg"
|
|
||||||
"mpv"
|
|
||||||
"password-store"
|
|
||||||
"slack"
|
|
||||||
"hyprland"
|
|
||||||
"niri"
|
|
||||||
"udiskie"
|
|
||||||
"xdg"
|
|
||||||
# "spotify"
|
|
||||||
"wine"
|
|
||||||
"cura"
|
|
||||||
"chrome"
|
|
||||||
"email"
|
|
||||||
"digikam"
|
|
||||||
"dolphin"
|
|
||||||
"tor-browser"
|
|
||||||
"kicad"
|
|
||||||
"monero"
|
|
||||||
"teams"
|
|
||||||
"obs-studio"
|
|
||||||
"calibre"
|
|
||||||
"reinstall-magisk-on-lineage"
|
|
||||||
"vscode-server"
|
|
||||||
"zk"
|
|
||||||
"catppuccin"
|
|
||||||
"freecad"
|
|
||||||
"zathura"
|
|
||||||
"imv"
|
|
||||||
"libreoffice"
|
|
||||||
"emacs"
|
|
||||||
"vial"
|
|
||||||
"chirp"
|
|
||||||
"sdrangel"
|
|
||||||
"discord"
|
|
||||||
"zoom"
|
|
||||||
"pantalaimon"
|
|
||||||
"gimp"
|
|
||||||
"jellyfin"
|
|
||||||
];
|
|
||||||
extraGroups = [ "plugdev" ];
|
|
||||||
backupPaths = [ ];
|
|
||||||
};
|
|
||||||
|
|
||||||
boot.kernelParams = [ "ip=dhcp" ];
|
|
||||||
boot.initrd.kernelModules = [ "amdgpu" ];
|
|
||||||
boot.initrd.availableKernelModules = [
|
|
||||||
"nvme"
|
|
||||||
"xhci_pci"
|
|
||||||
"usbhid"
|
|
||||||
"thunderbolt"
|
|
||||||
"vmd"
|
|
||||||
"usb_storage"
|
|
||||||
"sd_mod"
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = "zpool/root";
|
|
||||||
fsType = "zfs";
|
|
||||||
options = [ "zfsutil" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/nix" = {
|
|
||||||
device = "zpool/nix";
|
|
||||||
fsType = "zfs";
|
|
||||||
options = [ "zfsutil" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/var" = {
|
|
||||||
device = "zpool/var";
|
|
||||||
fsType = "zfs";
|
|
||||||
options = [ "zfsutil" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/home" = {
|
|
||||||
device = "zpool/home";
|
|
||||||
fsType = "zfs";
|
|
||||||
options = [ "zfsutil" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
|
||||||
device = "/dev/disk/by-uuid/4AA5-7242";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [
|
|
||||||
"fmask=0022"
|
|
||||||
"dmask=0022"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/mnt/shared" = {
|
|
||||||
device = "/dev/nvme0n1p2";
|
|
||||||
fsType = "ntfs";
|
|
||||||
options = [ "nofail" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.zfs.autoScrub.enable = true;
|
|
||||||
|
|
||||||
networking.hostId = "30fc8ed7";
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "schedutil";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
hardware.enableRedistributableFirmware = lib.mkDefault true;
|
|
||||||
|
|
||||||
services.power-profiles-daemon.enable = true;
|
|
||||||
|
|
||||||
hardware.graphics = {
|
|
||||||
enable = true;
|
|
||||||
enable32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
zramSwap = {
|
|
||||||
enable = true;
|
|
||||||
algorithm = "zstd";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -11,38 +11,33 @@
|
||||||
"wireguard-server"
|
"wireguard-server"
|
||||||
"mediatomb"
|
"mediatomb"
|
||||||
"transmission"
|
"transmission"
|
||||||
|
# "hercules-ci"
|
||||||
"home-assistant"
|
"home-assistant"
|
||||||
"adguard-home"
|
"adguard-home"
|
||||||
"cloudflare-dyndns"
|
"cloudflare-dyndns"
|
||||||
"sisko-proxy"
|
"sisko-proxy"
|
||||||
|
"invidious"
|
||||||
|
"searx"
|
||||||
"sisko-share"
|
"sisko-share"
|
||||||
"forgejo"
|
"forgejo"
|
||||||
"prometheus"
|
"prometheus"
|
||||||
"grafana"
|
"grafana"
|
||||||
"prometheus-exporters"
|
"prometheus-exporters"
|
||||||
"loki"
|
"loki"
|
||||||
"alloy"
|
"promtail"
|
||||||
"restic"
|
"restic"
|
||||||
"atuin"
|
"atuin"
|
||||||
"immich"
|
"immich"
|
||||||
"paperless"
|
"paperless"
|
||||||
"syncthing"
|
"syncthing"
|
||||||
"atticd"
|
"atticd"
|
||||||
"jellyfin"
|
|
||||||
"matrix"
|
|
||||||
"arr"
|
|
||||||
"zerotier"
|
|
||||||
"mosh"
|
|
||||||
"amule"
|
|
||||||
"adguard-home"
|
|
||||||
"garmin-grafana"
|
|
||||||
# "dump1090"
|
|
||||||
"arbi"
|
|
||||||
]
|
]
|
||||||
++ [
|
++ [
|
||||||
./disko.nix
|
./disko.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linux_6_11;
|
||||||
|
|
||||||
system.stateVersion = "24.05";
|
system.stateVersion = "24.05";
|
||||||
|
|
||||||
powerManagement.cpuFreqGovernor = "schedutil";
|
powerManagement.cpuFreqGovernor = "schedutil";
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
"battery"
|
"battery"
|
||||||
"printing"
|
"printing"
|
||||||
"wireguard-client"
|
"wireguard-client"
|
||||||
"alloy"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [
|
boot.initrd.availableKernelModules = [
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
{
|
{
|
||||||
keys = {
|
keys = {
|
||||||
users = {
|
users = {
|
||||||
ccr-ssh = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIm9Sl/I+5G4g4f6iE4oCUJteP58v+wMIew9ZuLB+Gea";
|
ccr-ssh = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCzCmDCtlGscpesHuoiruVWD2IjYEFtaIl9Y2JZGiOAyf3V17KPx0MikcknfmxSHi399SxppiaXQHxo/1wjGxXkXNTTv6h1fBuqwhJE6C8+ZSV+gal81vEnXX+/9w2FQqtVgnG2/mO7oJ0e3FY+6kFpOsGEhYexoGt/UxIpAZoqIN+CWNhJIASUkneaZWtgwiL8Afb59kJQ2E7WbBu+PjYZ/s5lhPobhlkz6s8rkhItvYdiSHT0DPDKvp1oEbxsxd4E4cjJFbahyS8b089NJd9gF5gs0b74H/2lUUymnl63cV37Mp4iXB4rtE69MbjqsGEBKTPumLualmc8pOGBHqWIdhAqGdZQeBajcb6VK0E3hcU0wBB+GJgm7KUzlAHGdC3azY0KlHMrLaZN0pBrgCVR6zBNWtZz2B2qMBZ8Cw+K4vut8GuspdXZscID10U578GxQvJAB9CdxNUtrzSmKX2UtZPB1udWjjIAlejzba4MG73uXgQEdv0NcuHNwaLuCWxTUT5QQF18IwlJ23Mg8aPK8ojUW5A+kGHAu9wtgZVcX1nS5cmYKSgLzcP1LA1l9fTJ1vqBSuy38GTdUzfzz7AbnkRfGPj2ALDgyx17Rc5ommjc1k0gFoeIqiLaxEs5FzDcRyo7YvZXPsGeIqNCYwQWw3+U+yUEJby8bxGb2d/6YQ== andrea.ciceri@autistici.org";
|
||||||
oneplus8t = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO8da1Mf11vXFF0kVDgxocVoGwpHHMEs9emS9T+v8hLb oneplus8t";
|
oneplus8t = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO8da1Mf11vXFF0kVDgxocVoGwpHHMEs9emS9T+v8hLb oneplus8t";
|
||||||
hercules-ci-agent = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGPupm00BiveTIYF6CNwuMijF5VvEaPDMjvt+vMlAy+N hercules-ci-agent";
|
hercules-ci-agent = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGPupm00BiveTIYF6CNwuMijF5VvEaPDMjvt+vMlAy+N hercules-ci-agent";
|
||||||
forgejo-ci = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH5mbqLoZ/0J45J7J+17XMGv/dXs3DGABJsnvDv4rgC9 forgjeo-ci";
|
|
||||||
};
|
};
|
||||||
hosts = {
|
hosts = {
|
||||||
kirk = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAH49KzayIro3L1bteR7nwupMM/vKlDh05t5/DFD9/uz";
|
kirk = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAH49KzayIro3L1bteR7nwupMM/vKlDh05t5/DFD9/uz";
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
picard = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ1+1z1IsLVJ6aGarMgzw3NbmFKcpYVgdUjl7xDsewxT";
|
picard = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ1+1z1IsLVJ6aGarMgzw3NbmFKcpYVgdUjl7xDsewxT";
|
||||||
deltaflyer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPETMwELvGTnhKJbpK0oFs4lK8vm/kV9KdgL9wufYDDQ";
|
deltaflyer = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPETMwELvGTnhKJbpK0oFs4lK8vm/kV9KdgL9wufYDDQ";
|
||||||
tpol = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIQxHSow2l0TDWTonBPPaGvTgVvMS/xsQOf1nHnvLSwV";
|
tpol = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIQxHSow2l0TDWTonBPPaGvTgVvMS/xsQOf1nHnvLSwV";
|
||||||
pike = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPx3Hy9L8w4mpr5HFcqLOr/wUk/wJeB9HjcLy2tt0U+x";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,67 +1,18 @@
|
||||||
{ config, lib, ... }:
|
|
||||||
let
|
|
||||||
interface = "enP4p65s0";
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
services.adguardhome = {
|
services.adguardhome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
port = 3000;
|
||||||
mutableSettings = true;
|
mutableSettings = true;
|
||||||
settings = {
|
settings = {
|
||||||
dhcp = {
|
openFirewall = true;
|
||||||
enabled = true;
|
|
||||||
interface_name = interface;
|
|
||||||
|
|
||||||
dhcpv4 = {
|
|
||||||
gateway_ip = "10.1.1.1";
|
|
||||||
range_start = "10.1.1.2";
|
|
||||||
range_end = "10.1.1.255";
|
|
||||||
subnet_mask = "255.255.255.0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
dns = {
|
|
||||||
upstream_dns = [
|
|
||||||
"https://dns10.quad9.net/dns-query"
|
|
||||||
];
|
|
||||||
|
|
||||||
bind_hosts = [
|
|
||||||
"127.0.0.1"
|
|
||||||
"10.1.1.2"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
# otherwise it creates a directory in /var/lib/private which can't be easily persisted
|
3000
|
||||||
systemd.services.adguardhome.serviceConfig.DynamicUser = lib.mkForce false;
|
|
||||||
|
|
||||||
networking.firewall.allowedUDPPorts = [
|
|
||||||
53
|
53
|
||||||
67
|
|
||||||
];
|
];
|
||||||
networking.firewall.allowedTCPPorts = [ 53 ];
|
networking.firewall.allowedUDPPorts = [ 53 ];
|
||||||
|
|
||||||
networking.interfaces.${interface} = {
|
|
||||||
ipv4.addresses = [
|
|
||||||
{
|
|
||||||
address = "10.1.1.2";
|
|
||||||
prefixLength = 24;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
useDHCP = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.defaultGateway = "10.1.1.1";
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
"/var/lib/AdGuardHome"
|
"/var/lib/AdGuardHome"
|
||||||
];
|
];
|
||||||
|
|
||||||
services.nginx.virtualHosts."adguard.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.adguardhome.port}";
|
|
||||||
};
|
|
||||||
serverAliases = [ "adguard.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
{ config, ... }:
|
|
||||||
{
|
|
||||||
services.alloy = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
environment.etc."alloy/config.alloy".text = ''
|
|
||||||
local.file_match "local_files" {
|
|
||||||
path_targets = [{
|
|
||||||
__path__ = "/var/log/*.log",
|
|
||||||
}]
|
|
||||||
sync_period = "5s"
|
|
||||||
}
|
|
||||||
|
|
||||||
loki.source.journal "systemd" {
|
|
||||||
max_age = "24h"
|
|
||||||
forward_to = [loki.write.default.receiver]
|
|
||||||
}
|
|
||||||
|
|
||||||
loki.source.journal "kernel" {
|
|
||||||
max_age = "24h"
|
|
||||||
forward_to = [loki.write.default.receiver]
|
|
||||||
}
|
|
||||||
|
|
||||||
loki.relabel "nixfleet_journal" {
|
|
||||||
forward_to = []
|
|
||||||
rule {
|
|
||||||
source_labels = ["__journal__systemd_unit"]
|
|
||||||
target_label = "systemd_unit"
|
|
||||||
}
|
|
||||||
rule {
|
|
||||||
source_labels = ["__journal_syslog_identifier"]
|
|
||||||
target_label = "syslog_identifier"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
loki.source.journal "nixfleet_journal" {
|
|
||||||
forward_to = [loki.write.default.receiver]
|
|
||||||
relabel_rules = loki.relabel.nixfleet_journal.rules
|
|
||||||
format_as_json = true
|
|
||||||
}
|
|
||||||
|
|
||||||
loki.write "default" {
|
|
||||||
endpoint {
|
|
||||||
url = "http://sisko.wg.aciceri.dev:${
|
|
||||||
builtins.toString config.services.loki.configuration.server.http_listen_port or 3100
|
|
||||||
}/loki/api/v1/push"
|
|
||||||
}
|
|
||||||
external_labels = {
|
|
||||||
host = "${config.networking.hostName}",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
args@{ lib, pkgs, ... }:
|
|
||||||
let
|
|
||||||
pkgs = builtins.getFlake "github:NixOS/nixpkgs/d278c7bfb89130ac167e80d2250f9abc0bede419";
|
|
||||||
amarr = pkgs.legacyPackages.${args.pkgs.system}.amarr;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
systemd.services.amarr = {
|
|
||||||
description = "amarr";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
after = [ "network.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
User = "root";
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = lib.getExe amarr;
|
|
||||||
};
|
|
||||||
environment = {
|
|
||||||
AMULE_HOST = "localhost";
|
|
||||||
AMULE_PORT = "4712";
|
|
||||||
AMULE_PASSWORD = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
let
|
|
||||||
rev = "966199fe1dccc9c6c7016bdb1d9582f27797bc02";
|
|
||||||
amule-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
|
||||||
inherit (amule-flake.legacyPackages.${pkgs.system}) amule-daemon amule-web;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
disabledModules = [ "services/networking/amuled.nix" ];
|
|
||||||
documentation.nixos.enable = false;
|
|
||||||
|
|
||||||
imports = [ "${amule-flake}/nixos/modules/services/networking/amuled.nix" ];
|
|
||||||
|
|
||||||
services.amule = {
|
|
||||||
enable = true;
|
|
||||||
package = amule-daemon;
|
|
||||||
amuleWebPackage = amule-web;
|
|
||||||
openPeerPorts = true;
|
|
||||||
openWebServerPort = true;
|
|
||||||
# TODO the service is accessible only from the VPN
|
|
||||||
# however better using agenix
|
|
||||||
ExternalConnectPasswordFile = pkgs.writeText "password" "pippo";
|
|
||||||
WebServerPasswordFile = pkgs.writeText "password" "pippo";
|
|
||||||
settings = {
|
|
||||||
eMule = {
|
|
||||||
IncomingDir = "/mnt/hd/amule";
|
|
||||||
TempDir = "/mnt/hd/amule/Temp";
|
|
||||||
};
|
|
||||||
WebServer = {
|
|
||||||
Enabled = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
config.services.amule.dataDir
|
|
||||||
];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."amule.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.amule.settings.WebServer.Port}";
|
|
||||||
};
|
|
||||||
serverAliases = [ "amule.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
let
|
|
||||||
rev = "d531730d9640160f0519ef4b3640f8da49dd96f8";
|
|
||||||
arbi-flake = builtins.getFlake "git+ssh://git@github.com/aciceri/arbi.git?rev=${rev}";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ arbi-flake.nixosModules.arbi ];
|
|
||||||
|
|
||||||
services.arbi = {
|
|
||||||
enable = true;
|
|
||||||
log_level = "debug";
|
|
||||||
configFile = pkgs.writeText "arbi-config.kdl" ''
|
|
||||||
endpoint "wss://eth-mainnet.g.alchemy.com/v2/<REDACTED>"
|
|
||||||
pairs_file "pairs.json"
|
|
||||||
concurrency 4
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
config.services.arbi.dataDir
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
services.radarr = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.sonarr = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.prowlarr = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.prowlarr = {
|
|
||||||
serviceConfig = {
|
|
||||||
DynamicUser = lib.mkForce false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.radarr.extraGroups = [ "transmission" ];
|
|
||||||
users.users.sonarr.extraGroups = [ "transmission" ];
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
"/var/lib/radarr"
|
|
||||||
"/var/lib/prowlarr"
|
|
||||||
"/var/lib/sonarr"
|
|
||||||
];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
|
||||||
"radarr.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:7878"; # FIXME hardcoded port
|
|
||||||
};
|
|
||||||
serverAliases = [ "radarr.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
"prowlarr.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:9696"; # FIXME hardcoded port
|
|
||||||
};
|
|
||||||
serverAliases = [ "prowlarr.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
"sonarr.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:8989"; # FIXME hardcoded port
|
|
||||||
};
|
|
||||||
serverAliases = [ "sonarr.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -2,5 +2,10 @@
|
||||||
{
|
{
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
|
|
||||||
|
hardware.pulseaudio = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.pulseaudioFull;
|
||||||
|
};
|
||||||
|
|
||||||
users.extraUsers.ccr.extraGroups = [ "audio" ];
|
users.extraUsers.ccr.extraGroups = [ "audio" ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
lib,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
services.blueman.enable = true;
|
services.blueman.enable = true;
|
||||||
|
hardware.pulseaudio.enable = true;
|
||||||
hardware.bluetooth = {
|
hardware.bluetooth = {
|
||||||
enable = lib.mkDefault true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
General = {
|
General = {
|
||||||
Name = config.networking.hostName;
|
Name = config.networking.hostName;
|
||||||
|
|
|
@ -28,7 +28,7 @@ in
|
||||||
|
|
||||||
shell = lib.mkOption {
|
shell = lib.mkOption {
|
||||||
type = lib.types.package;
|
type = lib.types.package;
|
||||||
default = pkgs.bash;
|
default = pkgs.fish;
|
||||||
};
|
};
|
||||||
|
|
||||||
modules = lib.mkOption {
|
modules = lib.mkOption {
|
||||||
|
@ -70,31 +70,6 @@ in
|
||||||
type = types.listOf types.str;
|
type = types.listOf types.str;
|
||||||
default = [ ];
|
default = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
impermanence = {
|
|
||||||
enable = lib.mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = (config.environment.persistence or null) != null;
|
|
||||||
};
|
|
||||||
|
|
||||||
directories = lib.mkOption {
|
|
||||||
type = types.listOf types.anything; # TODO re-use type from the NixOS module
|
|
||||||
default = [
|
|
||||||
".cache"
|
|
||||||
"Downloads"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
files = lib.mkOption {
|
|
||||||
type = types.listOf types.anything; # TODO re-use type from the NixOS module
|
|
||||||
default = [
|
|
||||||
".ssh/id_ed25519.pub"
|
|
||||||
".ssh/id_ed25519"
|
|
||||||
".ssh/authorized_keys"
|
|
||||||
".ssh/known_hosts"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable (
|
config = lib.mkIf cfg.enable (
|
||||||
|
@ -128,6 +103,8 @@ in
|
||||||
openssh.authorizedKeys.keys = config.ccr.authorizedKeys;
|
openssh.authorizedKeys.keys = config.ccr.authorizedKeys;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.fish.enable = true;
|
||||||
|
|
||||||
services.getty.autologinUser = if config.ccr.autologin then cfg.username else null;
|
services.getty.autologinUser = if config.ccr.autologin then cfg.username else null;
|
||||||
|
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
|
@ -145,22 +122,11 @@ in
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
++ [
|
|
||||||
(lib.optionalAttrs cfg.impermanence.enable {
|
|
||||||
home.persistence."/persist/home/${cfg.username}" = {
|
|
||||||
inherit (cfg.impermanence) directories files;
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
]
|
|
||||||
++ cfg.extraModules;
|
++ cfg.extraModules;
|
||||||
home.packages = cfg.packages;
|
home.packages = cfg.packages;
|
||||||
home.stateVersion = config.system.stateVersion;
|
home.stateVersion = config.system.stateVersion;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.impermanence.enable {
|
|
||||||
programs.fuse.userAllowOther = true;
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,14 @@
|
||||||
"aciceri.dev"
|
"aciceri.dev"
|
||||||
"git.aciceri.dev"
|
"git.aciceri.dev"
|
||||||
"home.aciceri.dev"
|
"home.aciceri.dev"
|
||||||
"photos.aciceri.dev"
|
"torrent.aciceri.dev"
|
||||||
"jelly.aciceri.dev"
|
"search.aciceri.dev"
|
||||||
"matrix.aciceri.dev"
|
"invidious.aciceri.dev"
|
||||||
"vpn.aciceri.dev"
|
"vpn.aciceri.dev"
|
||||||
|
"photos.aciceri.dev"
|
||||||
|
"status.aciceri.dev"
|
||||||
|
"paper.aciceri.dev"
|
||||||
|
"cloud.aciceri.dev"
|
||||||
];
|
];
|
||||||
apiTokenFile = config.age.secrets.cloudflare-dyndns-api-token.path;
|
apiTokenFile = config.age.secrets.cloudflare-dyndns-api-token.path;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
fleetModules,
|
fleetModules,
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
@ -16,15 +15,4 @@
|
||||||
users.mutableUsers = false;
|
users.mutableUsers = false;
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
nixpkgs.config.allowUnfree = true; # Forgive me Mr. Stallman :(
|
nixpkgs.config.allowUnfree = true; # Forgive me Mr. Stallman :(
|
||||||
system.switch.enableNg = true;
|
|
||||||
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.btop
|
|
||||||
pkgs.ncdu
|
|
||||||
];
|
|
||||||
|
|
||||||
# FIXME not the best place
|
|
||||||
nixpkgs.config.permittedInsecurePackages = [
|
|
||||||
"olm-3.2.16"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
dump1090-flake = builtins.getFlake "github:NixOS/nixpkgs/541f05042033467730fb8cedb08355dc91b94c74";
|
|
||||||
inherit (dump1090-flake.legacyPackages.${pkgs.system}) dump1090-fa;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [ "${dump1090-flake}/nixos/modules/services/misc/dump1090-fa.nix" ];
|
|
||||||
|
|
||||||
hardware.rtl-sdr.enable = true;
|
|
||||||
|
|
||||||
disabledModules = [ "services/misc/dump10190-fa.nix" ];
|
|
||||||
documentation.nixos.enable = false;
|
|
||||||
|
|
||||||
services.dump1090-fa = {
|
|
||||||
enable = true;
|
|
||||||
package = dump1090-fa;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."dump1090.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations = {
|
|
||||||
"/".alias = "${dump1090-fa}/share/dump1090/";
|
|
||||||
"/data/".alias = "/run/dump1090-fa/";
|
|
||||||
};
|
|
||||||
serverAliases = [ "dump1090.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
{ pkgs, config, ... }:
|
|
||||||
let
|
|
||||||
domain = "firefly.aciceri.dev";
|
|
||||||
domainImporter = "import.firefly.aciceri.dev";
|
|
||||||
dbUser = config.services.firefly-iii.user;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
services.firefly-iii = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.firefly-iii;
|
|
||||||
virtualHost = domain;
|
|
||||||
enableNginx = true;
|
|
||||||
settings = {
|
|
||||||
APP_ENV = "production";
|
|
||||||
APP_KEY_FILE = config.age.secrets.firefly-app-key.path;
|
|
||||||
SITE_OWNER = "andrea.ciceri@autistici.org";
|
|
||||||
DB_CONNECTION = "pgsql";
|
|
||||||
DEFAULT_LANGUAGE = "en_US";
|
|
||||||
TZ = "Europe/Rome";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.firefly-iii-data-importer = {
|
|
||||||
enable = true;
|
|
||||||
enableNginx = true;
|
|
||||||
virtualHost = domainImporter;
|
|
||||||
settings = {
|
|
||||||
IGNORE_DUPLICATE_ERRORS = "false";
|
|
||||||
APP_ENV = "production";
|
|
||||||
APP_DEBUG = "false";
|
|
||||||
LOG_CHANNEL = "stack";
|
|
||||||
TRUSTED_PROXIES = "**";
|
|
||||||
TZ = "Europe/Rome";
|
|
||||||
FIREFLY_III_URL = "https://${domain}";
|
|
||||||
VANITY_URL = "https://${domain}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
imports = [ ../nginx-base ];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
|
||||||
${domain} = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
};
|
|
||||||
${domainImporter} = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.postgresql = {
|
|
||||||
ensureUsers = [
|
|
||||||
{
|
|
||||||
name = dbUser;
|
|
||||||
ensureDBOwnership = true;
|
|
||||||
ensureClauses.login = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
ensureDatabases = [ dbUser ];
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
config.services.firefly-iii.dataDir
|
|
||||||
config.services.firefly-iii-data-importer.dataDir
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -17,7 +17,6 @@ let
|
||||||
gnugrep
|
gnugrep
|
||||||
gawk
|
gawk
|
||||||
git
|
git
|
||||||
openssh
|
|
||||||
nix
|
nix
|
||||||
bash
|
bash
|
||||||
jq
|
jq
|
||||||
|
@ -39,6 +38,15 @@ let
|
||||||
cp -a "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" $out/etc/ssl/certs/ca-bundle.crt
|
cp -a "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" $out/etc/ssl/certs/ca-bundle.crt
|
||||||
'';
|
'';
|
||||||
numInstances = 1;
|
numInstances = 1;
|
||||||
|
pushToCache = pkgs.writeScript "push-to-cache.sh" ''
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
set -f # disable globbing
|
||||||
|
export IFS=' '
|
||||||
|
|
||||||
|
echo "Uploading paths" $OUT_PATHS
|
||||||
|
exec nix copy --to "s3://cache?profile=default®ion=eu-south-1&scheme=https&endpoint=cache.aciceri.dev" $OUT_PATHS
|
||||||
|
'';
|
||||||
in
|
in
|
||||||
lib.mkMerge [
|
lib.mkMerge [
|
||||||
{
|
{
|
||||||
|
@ -72,6 +80,7 @@ lib.mkMerge [
|
||||||
cat <<NIX_CONFIG > etc/nix/nix.conf
|
cat <<NIX_CONFIG > etc/nix/nix.conf
|
||||||
accept-flake-config = true
|
accept-flake-config = true
|
||||||
experimental-features = nix-command flakes
|
experimental-features = nix-command flakes
|
||||||
|
post-build-hook = ${pushToCache}
|
||||||
include access-tokens
|
include access-tokens
|
||||||
NIX_CONFIG
|
NIX_CONFIG
|
||||||
|
|
||||||
|
@ -112,9 +121,22 @@ lib.mkMerge [
|
||||||
nix.settings.trusted-users = [ "nixuser" ];
|
nix.settings.trusted-users = [ "nixuser" ];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
# Format of the token file:
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
podman.enable = true;
|
podman.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# virtualisation.containers.storage.settings = {
|
||||||
|
# storage.driver = "zfs";
|
||||||
|
# storage.graphroot = "/var/lib/containers/storage";
|
||||||
|
# storage.runroot = "/run/containers/storage";
|
||||||
|
# storage.options.zfs.fsname = "zroot/root/podman";
|
||||||
|
# };
|
||||||
|
|
||||||
|
# virtualisation.containers.containersConf.settings = {
|
||||||
|
# # podman seems to not work with systemd-resolved
|
||||||
|
# containers.dns_servers = [ "8.8.8.8" "8.8.4.4" ];
|
||||||
|
# };
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
systemd.services =
|
systemd.services =
|
||||||
|
|
|
@ -70,10 +70,7 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
secrets.mailer.PASSWD = config.age.secrets.autistici-password.path;
|
secrets.mailer.PASSWD = config.age.secrets.autistici-password.path;
|
||||||
dump = {
|
dump.enable = true;
|
||||||
enable = true;
|
|
||||||
backupDir = "/mnt/hd/forgejo-dumps";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
rev = "f24579d13ee035af96d4a68b765af2aa4b1018b6";
|
|
||||||
garmin-grafana-flake = builtins.getFlake "github:NixOS/nixpkgs/${rev}";
|
|
||||||
inherit (garmin-grafana-flake.legacyPackages.${pkgs.system}) garmin-grafana;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
users.users.garmin-grafana = {
|
|
||||||
isSystemUser = true;
|
|
||||||
group = "garmin-grafana";
|
|
||||||
extraGroups = [ "garmin-grafana" ];
|
|
||||||
home = "/var/lib/garmin-grafana";
|
|
||||||
};
|
|
||||||
|
|
||||||
users.groups.garmin-grafana = { };
|
|
||||||
|
|
||||||
systemd.services.garmin-grafana = {
|
|
||||||
description = "garmin-grafana";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
environment = {
|
|
||||||
INFLUXDB_HOST = "localhost";
|
|
||||||
INFLUXDB_PORT = "8086"; # it's hardcoded in the influxdb NixOS module
|
|
||||||
INFLUXDB_USERNAME = "garmin-grafana";
|
|
||||||
INFLUXDB_PASSWORD = "password"; # FIXME terrible but the databse is not exposed at least
|
|
||||||
INFLUXDB_DATABASE = "garmin-stats";
|
|
||||||
GARMINCONNECT_IS_CN = "False";
|
|
||||||
USER_TIMEZONE = "Europe/Rome";
|
|
||||||
KEEP_FIT_FILES = "True";
|
|
||||||
ALWAYS_PROCESS_FIT_FILES = "True";
|
|
||||||
# MANUAL_START_DATE = "2024-06-01";
|
|
||||||
# MANUAL_END_DATE = "2025-12-31";
|
|
||||||
};
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = lib.getExe garmin-grafana;
|
|
||||||
Group = "garmin-grafana";
|
|
||||||
User = "garmin-grafana";
|
|
||||||
WorkingDirectory = "/var/lib/garmin-grafana";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# garmin-grafana uses influxdb V1, probably it's the only software I'll ever use using the V1
|
|
||||||
# so I"m keeping its declaration inside this module
|
|
||||||
services.influxdb.enable = true;
|
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
"/var/lib/garmin-grafana"
|
|
||||||
config.services.influxdb.dataDir
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -7,7 +7,7 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
server = {
|
server = {
|
||||||
domain = "status.sisko.aciceri.dev";
|
domain = "status.aciceri.dev";
|
||||||
http_addr = "127.0.0.1";
|
http_addr = "127.0.0.1";
|
||||||
http_port = 2342;
|
http_port = 2342;
|
||||||
root_url = "https://${config.services.grafana.settings.server.domain}:443/";
|
root_url = "https://${config.services.grafana.settings.server.domain}:443/";
|
||||||
|
@ -30,11 +30,10 @@ in
|
||||||
];
|
];
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
services.nginx.virtualHosts = {
|
||||||
"status.sisko.wg.aciceri.dev" = {
|
"status.aciceri.dev" = {
|
||||||
useACMEHost = "aciceri.dev";
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString cfg.settings.server.http_port}";
|
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString cfg.settings.server.http_port}";
|
||||||
serverAliases = [ "status.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,31 +5,22 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
sessions = builtins.concatStringsSep ":" [
|
sessions = builtins.concatStringsSep ":" [
|
||||||
# (pkgs.writeTextFile {
|
|
||||||
# name = "xorg-session.desktop";
|
|
||||||
# destination = "/hyprland-session.desktop";
|
|
||||||
# text = ''
|
|
||||||
# [Desktop Entry]
|
|
||||||
# Name=Hyprland
|
|
||||||
# Exec=Hyprland
|
|
||||||
# '';
|
|
||||||
# })
|
|
||||||
# (pkgs.writeTextFile {
|
|
||||||
# name = "xorg-session.desktop";
|
|
||||||
# destination = "/cosmic-session.desktop";
|
|
||||||
# text = ''
|
|
||||||
# [Desktop Entry]
|
|
||||||
# Name=Cosmic
|
|
||||||
# Exec=cosmic-session
|
|
||||||
# '';
|
|
||||||
# })
|
|
||||||
(pkgs.writeTextFile {
|
(pkgs.writeTextFile {
|
||||||
name = "xorg-session.desktop";
|
name = "xorg-session.desktop";
|
||||||
destination = "/niri-session.desktop";
|
destination = "/hyprland-session.desktop";
|
||||||
text = ''
|
text = ''
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Niri
|
Name=Hyprland
|
||||||
Exec=${lib.getExe' pkgs.niri "niri-session"}
|
Exec=Hyprland
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
(pkgs.writeTextFile {
|
||||||
|
name = "xorg-session.desktop";
|
||||||
|
destination = "/cosmic-session.desktop";
|
||||||
|
text = ''
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Cosmic
|
||||||
|
Exec=cosmic-session
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
|
@ -80,6 +80,7 @@ in
|
||||||
time_zone = "Europe/Rome";
|
time_zone = "Europe/Rome";
|
||||||
temperature_unit = "C";
|
temperature_unit = "C";
|
||||||
external_url = "https://home.aciceri.dev";
|
external_url = "https://home.aciceri.dev";
|
||||||
|
internal_url = "http://rock5b.fleet:8123";
|
||||||
};
|
};
|
||||||
logger.default = "WARNING";
|
logger.default = "WARNING";
|
||||||
wake_on_lan = { };
|
wake_on_lan = { };
|
||||||
|
@ -88,7 +89,7 @@ in
|
||||||
name = "Picard";
|
name = "Picard";
|
||||||
platform = "wake_on_lan";
|
platform = "wake_on_lan";
|
||||||
mac = "74:56:3c:37:17:bd"; # this shouldn't be public
|
mac = "74:56:3c:37:17:bd"; # this shouldn't be public
|
||||||
host = "picard.wg.aciceri.dev";
|
host = "picard.fleet";
|
||||||
turn_off.service = "shell_command.turn_off_picard";
|
turn_off.service = "shell_command.turn_off_picard";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,25 +1,99 @@
|
||||||
{ config, ... }:
|
{ ... }:
|
||||||
{
|
let
|
||||||
environment.persistence."/persist".directories = [
|
vars = {
|
||||||
config.services.immich.machine-learning.environment.MACHINE_LEARNING_CACHE_FOLDER
|
serviceConfigRoot = "/mnt/hd/immich/state";
|
||||||
|
mainArray = "/mnt/hd/immich/";
|
||||||
|
domainName = "photos.aciceri.dev";
|
||||||
|
};
|
||||||
|
directories = [
|
||||||
|
"${vars.serviceConfigRoot}/immich"
|
||||||
|
"${vars.serviceConfigRoot}/immich/postgresql"
|
||||||
|
"${vars.serviceConfigRoot}/immich/postgresql/data"
|
||||||
|
"${vars.serviceConfigRoot}/immich/config"
|
||||||
|
"${vars.serviceConfigRoot}/immich/machine-learning"
|
||||||
|
"${vars.mainArray}/Photos"
|
||||||
|
"${vars.mainArray}/Photos/Immich"
|
||||||
|
"${vars.mainArray}/Photos/S10m"
|
||||||
];
|
];
|
||||||
|
in
|
||||||
services.immich = {
|
{
|
||||||
enable = true;
|
systemd.tmpfiles.rules = map (x: "d ${x} 0775 root root - -") directories;
|
||||||
mediaLocation = "/mnt/hd/immich";
|
systemd.services = {
|
||||||
|
podman-immich = {
|
||||||
|
requires = [
|
||||||
|
"podman-immich-redis.service"
|
||||||
|
"podman-immich-postgres.service"
|
||||||
|
];
|
||||||
|
after = [
|
||||||
|
"podman-immich-redis.service"
|
||||||
|
"podman-immich-postgres.service"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
podman-immich-postgres = {
|
||||||
|
requires = [ "podman-immich-redis.service" ];
|
||||||
|
after = [ "podman-immich-redis.service" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# The reason for this hack is quite bad
|
virtualisation.oci-containers.containers = {
|
||||||
# Before using the NixOS module Immich was installed using Docker, for this
|
immich = {
|
||||||
# reason the paths of the images in the database looks like `/photos/...`
|
autoStart = true;
|
||||||
# and after migrating to the NixOS module I kept getting 404s for all the
|
image = "ghcr.io/imagegenius/immich:latest";
|
||||||
# old pictures.
|
volumes = [
|
||||||
# Frankly it seems weird that it saved the absolute paths in the DB, perhaps
|
"${vars.serviceConfigRoot}/immich/config:/config"
|
||||||
# it saves somewhere else the media location root and then merge the paths,
|
"${vars.mainArray}/Photos/Immich:/photos"
|
||||||
# however, nevertheless I set `mediaLocation` it didn't work
|
"${vars.mainArray}/Photos/S10m:/import:ro"
|
||||||
fileSystems."/photos" = {
|
"${vars.serviceConfigRoot}/immich/machine-learning:/config/machine-learning"
|
||||||
device = "/mnt/hd/immich/";
|
];
|
||||||
fsType = "ext4";
|
# environmentFiles = [ config.age.secrets.ariaImmichDatabase.path ];
|
||||||
options = [ "bind" ];
|
environment = {
|
||||||
|
PUID = "994";
|
||||||
|
PGID = "993";
|
||||||
|
TZ = "Europe/Rome";
|
||||||
|
DB_HOSTNAME = "immich-postgres";
|
||||||
|
DB_USERNAME = "immich";
|
||||||
|
DB_DATABASE_NAME = "immich";
|
||||||
|
REDIS_HOSTNAME = "immich-redis";
|
||||||
|
DB_PASSWORD = "password";
|
||||||
|
};
|
||||||
|
extraOptions = [
|
||||||
|
"--pull=newer"
|
||||||
|
"--network=container:immich-redis"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
immich-redis = {
|
||||||
|
autoStart = true;
|
||||||
|
image = "redis";
|
||||||
|
extraOptions = [
|
||||||
|
"--pull=newer"
|
||||||
|
"-l=traefik.enable=true"
|
||||||
|
"-l=traefik.http.routers.immich.rule=Host(`photos.${vars.domainName}`)"
|
||||||
|
"-l=traefik.http.routers.immich.service=immich"
|
||||||
|
"-l=traefik.http.services.immich.loadbalancer.server.port=8080"
|
||||||
|
];
|
||||||
|
ports = [
|
||||||
|
"8080:8080"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
immich-postgres = {
|
||||||
|
autoStart = true;
|
||||||
|
image = "tensorchord/pgvecto-rs:pg14-v0.2.1";
|
||||||
|
volumes = [
|
||||||
|
"${vars.serviceConfigRoot}/immich/postgresql/data:/var/lib/postgresql/data"
|
||||||
|
];
|
||||||
|
# environmentFiles = [ config.age.secrets.ariaImmichDatabase.path ];
|
||||||
|
environment = {
|
||||||
|
POSTGRES_USER = "immich";
|
||||||
|
POSTGRES_DB = "immich";
|
||||||
|
POSTGRES_HOST_AUTH_METHOD = "trust";
|
||||||
|
POSTGRES_PASSWORD = "password";
|
||||||
|
};
|
||||||
|
extraOptions = [
|
||||||
|
"--pull=newer"
|
||||||
|
"--network=container:immich-redis"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,7 @@
|
||||||
{ config, ... }:
|
|
||||||
{
|
{
|
||||||
services.jellyfin = {
|
services.jellyfin = {
|
||||||
enable = true;
|
enable = true;
|
||||||
openFirewall = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.jellyfin.extraGroups = [ "transmission" ];
|
users.users.jellyfin.extraGroups = [ "transmission" ];
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
|
||||||
config.services.jellyfin.dataDir
|
|
||||||
];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
|
||||||
"jelly.aciceri.dev" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/".proxyPass = "http://127.0.0.1:8096"; # FIXME hardcoded port
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
let
|
let
|
||||||
clientConfig = {
|
clientConfig = {
|
||||||
"m.homeserver".base_url = "https://matrix.aciceri.dev";
|
"m.homeserver".base_url = "https://matrix.aciceri.dev";
|
||||||
|
"org.matrix.msc3575.proxy".url = "https://syncv3.matrix.aciceri.dev";
|
||||||
};
|
};
|
||||||
serverConfig."m.server" = "matrix.aciceri.dev:443";
|
serverConfig."m.server" = "matrix.aciceri.dev:443";
|
||||||
mkWellKnown = data: ''
|
mkWellKnown = data: ''
|
||||||
|
@ -20,7 +21,7 @@ in
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
services.nginx.virtualHosts = {
|
||||||
"aciceri.dev" = {
|
"aciceri.dev" = {
|
||||||
useACMEHost = "aciceri.dev";
|
enableACME = true;
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig;
|
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig;
|
||||||
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig;
|
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig;
|
||||||
|
@ -35,6 +36,17 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
initialScript = pkgs.writeText "synapse-init.sql" ''
|
||||||
|
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
|
||||||
|
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
|
||||||
|
TEMPLATE template0
|
||||||
|
LC_COLLATE = "C"
|
||||||
|
LC_CTYPE = "C";
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
systemd.tmpfiles.rules = [
|
systemd.tmpfiles.rules = [
|
||||||
"d ${config.services.matrix-synapse.dataDir} 770 matrix-synapse matrix-synapse"
|
"d ${config.services.matrix-synapse.dataDir} 770 matrix-synapse matrix-synapse"
|
||||||
];
|
];
|
||||||
|
@ -67,4 +79,28 @@ in
|
||||||
};
|
};
|
||||||
extraConfigFiles = [ config.age.secrets.matrix-registration-shared-secret.path ];
|
extraConfigFiles = [ config.age.secrets.matrix-registration-shared-secret.path ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
backup.paths = [
|
||||||
|
config.services.matrix-synapse.dataDir
|
||||||
|
"/var/backup/postgresql/matrix-synapse.sql.gz"
|
||||||
|
];
|
||||||
|
|
||||||
|
services.postgresqlBackup = {
|
||||||
|
enable = true;
|
||||||
|
databases = [ "matrix-synapse" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.matrix-sliding-sync = {
|
||||||
|
enable = true;
|
||||||
|
environmentFile = config.age.secrets.matrix-sliding-sync-secret.path;
|
||||||
|
settings = {
|
||||||
|
SYNCV3_SERVER = "http://localhost:8008";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."syncv3.matrix.aciceri.dev" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."/".proxyPass = config.services.matrix-sliding-sync.settings.SYNCV3_SERVER;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,18 +5,11 @@
|
||||||
serverName = "Sisko";
|
serverName = "Sisko";
|
||||||
mediaDirectories = [
|
mediaDirectories = [
|
||||||
{
|
{
|
||||||
path = "/mnt/hd/movies";
|
path = "/mnt/hd/torrent";
|
||||||
recursive = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
path = "/mnt/hd/series";
|
|
||||||
recursive = true;
|
recursive = true;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.mediatomb.extraGroups = [
|
users.users.mediatomb.extraGroups = [ "transmission" ];
|
||||||
"radarr"
|
|
||||||
"sonarr"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
source = "${pkgs.nfs-utils.out}/bin/mount.nfs";
|
source = "${pkgs.nfs-utils.out}/bin/mount.nfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/mnt/nas" = {
|
fileSystems."/home/${config.ccr.username}/nas" = {
|
||||||
device = "sisko.wg.aciceri.dev:/hd";
|
device = "sisko.fleet:/hd";
|
||||||
fsType = "nfs";
|
fsType = "nfs";
|
||||||
options = [
|
options = [
|
||||||
"x-systemd.automount"
|
"x-systemd.automount"
|
||||||
|
|
|
@ -1,22 +1,7 @@
|
||||||
{ config, ... }:
|
|
||||||
{
|
{
|
||||||
security.acme = {
|
security.acme = {
|
||||||
acceptTerms = true;
|
acceptTerms = true;
|
||||||
defaults.email = "andrea.ciceri@autistici.org";
|
defaults.email = "andrea.ciceri@autistici.org";
|
||||||
certs = {
|
|
||||||
"aciceri.dev" = {
|
|
||||||
reloadServices = [ "nginx.service" ];
|
|
||||||
domain = "aciceri.dev";
|
|
||||||
extraDomainNames = [
|
|
||||||
"*.sisko.zt.aciceri.dev"
|
|
||||||
"*.sisko.wg.aciceri.dev"
|
|
||||||
];
|
|
||||||
dnsProvider = "cloudflare";
|
|
||||||
dnsPropagationCheck = true;
|
|
||||||
group = config.services.nginx.group;
|
|
||||||
environmentFile = config.age.secrets.cloudflare-dyndns-api-token.path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
@ -26,7 +11,6 @@
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
statusPage = true;
|
|
||||||
recommendedGzipSettings = true;
|
recommendedGzipSettings = true;
|
||||||
recommendedOptimisation = true;
|
recommendedOptimisation = true;
|
||||||
recommendedProxySettings = true;
|
recommendedProxySettings = true;
|
||||||
|
|
|
@ -6,6 +6,17 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(final: _: {
|
||||||
|
nix-fast-build = fleetFlake.inputs.nix-fast-build.packages.${final.system}.nix-fast-build // {
|
||||||
|
nix = final.nix;
|
||||||
|
};
|
||||||
|
nix-eval-job = fleetFlake.inputs.lix-eval-jobs.packages.${final.system}.nix-eval-jobs // {
|
||||||
|
nix = final.nix;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.nix-fast-build ];
|
environment.systemPackages = [ pkgs.nix-fast-build ];
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
|
@ -81,7 +92,7 @@
|
||||||
distributedBuilds = true;
|
distributedBuilds = true;
|
||||||
buildMachines =
|
buildMachines =
|
||||||
lib.lists.optional (config.networking.hostName == "picard") {
|
lib.lists.optional (config.networking.hostName == "picard") {
|
||||||
hostName = "sisko.wg.aciceri.dev";
|
hostName = "sisko.fleet";
|
||||||
system = "aarch64-linux";
|
system = "aarch64-linux";
|
||||||
maxJobs = 7;
|
maxJobs = 7;
|
||||||
supportedFeatures = [
|
supportedFeatures = [
|
||||||
|
|
|
@ -22,18 +22,4 @@
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
config.services.paperless.dataDir
|
config.services.paperless.dataDir
|
||||||
];
|
];
|
||||||
|
|
||||||
imports = [ ../nginx-base ];
|
|
||||||
|
|
||||||
services.nginx.virtualHosts."paper.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.paperless.port}";
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
client_max_body_size 50000M;
|
|
||||||
'';
|
|
||||||
serverAliases = [ "paper.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
services.pipewire = {
|
services.pipewire.enable = true;
|
||||||
enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
jack.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.pulseaudio = {
|
hardware.pulseaudio = {
|
||||||
enable = false;
|
enable = lib.mkForce false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
@ -16,7 +15,6 @@ in
|
||||||
"sisko"
|
"sisko"
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
]
|
]
|
||||||
{
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -55,7 +53,6 @@ in
|
||||||
"sisko"
|
"sisko"
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
]
|
]
|
||||||
{
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -65,17 +62,13 @@ in
|
||||||
[
|
[
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
]
|
]
|
||||||
{
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
restic = mkFor [ "sisko" ] {
|
# restic = mkFor ["sisko"] {
|
||||||
# https://github.com/ngosang/restic-exporter/issues/31
|
# enable = true;
|
||||||
enable = false;
|
# };
|
||||||
repository = config.services.restic.backups.sisko.repository;
|
|
||||||
passwordFile = config.age.secrets.SISKO_RESTIC_PASSWORD.path;
|
|
||||||
};
|
|
||||||
postgres = mkFor [ "sisko" ] {
|
postgres = mkFor [ "sisko" ] {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
@ -88,12 +81,9 @@ in
|
||||||
"sisko"
|
"sisko"
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
]
|
]
|
||||||
{
|
{
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.prometheus-restic-exporter.path = [ pkgs.openssh ];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,11 @@ in
|
||||||
pushgateway = {
|
pushgateway = {
|
||||||
enable = true;
|
enable = true;
|
||||||
web = {
|
web = {
|
||||||
listen-address = "sisko.wg.aciceri.dev:9094";
|
listen-address = "sisko.fleet:9094";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
checkConfig = false; # Otherwise it will fail because it cannot access bearer_token_file
|
checkConfig = false; # Otherwise it will fail because it cannot access bearer_token_file
|
||||||
webExternalUrl = "https://status.wg.aciceri.dev";
|
webExternalUrl = "https://status.aciceri.dev";
|
||||||
globalConfig.scrape_interval = "10s";
|
globalConfig.scrape_interval = "10s";
|
||||||
scrapeConfigs = [
|
scrapeConfigs = [
|
||||||
{
|
{
|
||||||
|
@ -22,28 +22,27 @@ in
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = [
|
targets = [
|
||||||
"sisko.wg.aciceri.dev:${builtins.toString config.services.home-assistant.config.http.server_port}"
|
"sisko.fleet:${builtins.toString config.services.home-assistant.config.http.server_port}"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
# {
|
{
|
||||||
# job_name = "pushgateway";
|
job_name = "pushgateway";
|
||||||
# static_configs = [
|
static_configs = [
|
||||||
# {
|
{
|
||||||
# targets = [ cfg.pushgateway.web.listen-address ];
|
targets = [ cfg.pushgateway.web.listen-address ];
|
||||||
# }
|
}
|
||||||
# ];
|
];
|
||||||
# }
|
}
|
||||||
{
|
{
|
||||||
job_name = "node";
|
job_name = "node";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9100") [
|
targets = builtins.map (host: "${host}.fleet:9100") [
|
||||||
"sisko"
|
"sisko"
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -52,10 +51,9 @@ in
|
||||||
job_name = "wireguard";
|
job_name = "wireguard";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9586") [
|
targets = builtins.map (host: "${host}.fleet:9586") [
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -64,10 +62,9 @@ in
|
||||||
job_name = "zfs";
|
job_name = "zfs";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9134") [
|
targets = builtins.map (host: "${host}.fleet:9134") [
|
||||||
"picard"
|
"picard"
|
||||||
"kirk"
|
"kirk"
|
||||||
"pike"
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -76,7 +73,7 @@ in
|
||||||
job_name = "restic";
|
job_name = "restic";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9753") [ "sisko" ];
|
targets = builtins.map (host: "${host}.fleet:9753") [ "sisko" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -84,7 +81,7 @@ in
|
||||||
job_name = "postgres";
|
job_name = "postgres";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9187") [ "sisko" ];
|
targets = builtins.map (host: "${host}.fleet:9187") [ "sisko" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -92,7 +89,7 @@ in
|
||||||
job_name = "nginx";
|
job_name = "nginx";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9117") [ "sisko" ];
|
targets = builtins.map (host: "${host}.fleet:9117") [ "sisko" ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -100,18 +97,16 @@ in
|
||||||
job_name = "smartctl";
|
job_name = "smartctl";
|
||||||
static_configs = [
|
static_configs = [
|
||||||
{
|
{
|
||||||
targets = builtins.map (host: "${host}.wg.aciceri.dev:9633") [
|
targets = builtins.map (host: "${host}.fleet:9633") [
|
||||||
"sisko"
|
"sisko"
|
||||||
"kirk"
|
"kirk"
|
||||||
"picard"
|
"picard"
|
||||||
"pike"
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
"/var/lib/${cfg.stateDir}"
|
"/var/lib/${cfg.stateDir}"
|
||||||
];
|
];
|
||||||
|
|
|
@ -12,7 +12,7 @@ let
|
||||||
};
|
};
|
||||||
clients = [
|
clients = [
|
||||||
{
|
{
|
||||||
url = "http://sisko.wg.aciceri.dev:${
|
url = "http://sisko.fleet:${
|
||||||
builtins.toString config.services.loki.configuration.server.http_listen_port or 3100
|
builtins.toString config.services.loki.configuration.server.http_listen_port or 3100
|
||||||
}/loki/api/v1/push";
|
}/loki/api/v1/push";
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,17 +15,26 @@
|
||||||
proxy_set_header Connection $connection_upgrade;
|
proxy_set_header Connection $connection_upgrade;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
"home.sisko.aciceri.dev" = {
|
"torrent.aciceri.dev" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
useACMEHost = "aciceri.dev";
|
enableACME = true;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.home-assistant.config.http.server_port}";
|
proxyPass = "http://localhost:${builtins.toString config.services.transmission.settings.rpc-port}";
|
||||||
proxyWebsockets = true;
|
};
|
||||||
|
};
|
||||||
|
"search.aciceri.dev" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:8888";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"invidious.aciceri.dev" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${builtins.toString config.services.invidious.port}";
|
||||||
};
|
};
|
||||||
extraConfig = ''
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection $connection_upgrade;
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
"photos.aciceri.dev" = {
|
"photos.aciceri.dev" = {
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
@ -34,10 +43,17 @@
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
enableACME = true;
|
enableACME = true;
|
||||||
locations."/" = {
|
locations."/" = {
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.immich.port}";
|
proxyPass = "http://localhost:8080";
|
||||||
proxyWebsockets = true;
|
proxyWebsockets = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
"paper.aciceri.dev" = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://localhost:${builtins.toString config.services.paperless.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
# "${config.services.nextcloud.hostName}" = {
|
# "${config.services.nextcloud.hostName}" = {
|
||||||
# forceSSL = true;
|
# forceSSL = true;
|
||||||
# enableACME = true;
|
# enableACME = true;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
{
|
||||||
systemd.tmpfiles.rules = [
|
systemd.tmpfiles.rules = [
|
||||||
"d /export 770 nobody nogroup"
|
"d /export 770 nobody nogroup"
|
||||||
|
@ -17,81 +16,24 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.nfs-server.preStart = ''
|
|
||||||
chmod -R 775 /export/hd/torrent
|
|
||||||
'';
|
|
||||||
|
|
||||||
services.webdav = {
|
services.webdav = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
address = "0.0.0.0";
|
address = "10.1.1.2"; # accessible only in LAN, used by Kodi installed on the TV
|
||||||
port = 9999;
|
port = 9999;
|
||||||
scope = "/mnt/hd/torrent";
|
scope = "/mnt/hd/torrent";
|
||||||
modify = false;
|
modify = false;
|
||||||
auth = false;
|
auth = false; # TODO should we enable authentication? It's only reachable in LAN
|
||||||
debug = true;
|
debug = true;
|
||||||
users = [ ];
|
users = [ ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.samba-wsdd = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
# workgroup = "WORKGROUP";
|
|
||||||
# hostname = "siko";
|
|
||||||
# discovery = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.avahi = {
|
|
||||||
publish.enable = true;
|
|
||||||
publish.userServices = true;
|
|
||||||
# ^^ Needed to allow samba to automatically register mDNS records (without the need for an `extraServiceFile`
|
|
||||||
#nssmdns4 = true;
|
|
||||||
# ^^ Not one hundred percent sure if this is needed- if it aint broke, don't fix it
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.samba = {
|
|
||||||
enable = true;
|
|
||||||
# global.security = "user";
|
|
||||||
package = pkgs.samba4Full;
|
|
||||||
# settings.global = {
|
|
||||||
# "workgroup" = "WORKGROUP";
|
|
||||||
# "server string" = "sisko";
|
|
||||||
# "netbios name" = "sisko";
|
|
||||||
# "security" = "user";
|
|
||||||
# "map to guest" = "bad user";
|
|
||||||
# "vfs objects" = "recycle";
|
|
||||||
# "recycle:repository" = ".recycle";
|
|
||||||
# "recycle:keeptree" = "yes";
|
|
||||||
# "recycle:versions" = "yes";
|
|
||||||
# "hosts allow" = "10.1.1.0. 127.0.0.1 localhost";
|
|
||||||
# };
|
|
||||||
settings = {
|
|
||||||
torrent = {
|
|
||||||
path = "/mnt/hd/torrent";
|
|
||||||
comment = "hd";
|
|
||||||
"force user" = "transmission";
|
|
||||||
browseable = "yes";
|
|
||||||
writeable = "yes";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.webdav.extraGroups = [ "transmission" ];
|
users.users.webdav.extraGroups = [ "transmission" ];
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall.allowedTCPPorts = [
|
||||||
allowedTCPPorts = [
|
2049
|
||||||
2049
|
9999
|
||||||
9999
|
];
|
||||||
139
|
|
||||||
445
|
|
||||||
];
|
|
||||||
allowedUDPPorts = [
|
|
||||||
137
|
|
||||||
138
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
services = {
|
services = {
|
||||||
syncthing = {
|
syncthing = {
|
||||||
enable = true;
|
enable = true;
|
||||||
guiAddress = "${config.networking.hostName}.wg.aciceri.dev:8434";
|
guiAddress = "${config.networking.hostName}.fleet:8434";
|
||||||
# TODO Use the home-manager module instead of the following conditions
|
# TODO Use the home-manager module instead of the following conditions
|
||||||
user = if config.networking.hostName == "sisko" then "syncthing" else "ccr";
|
user = if config.networking.hostName == "sisko" then "syncthing" else "ccr";
|
||||||
dataDir = if config.networking.hostName == "sisko" then "/mnt/hd/syncthing" else "/home/ccr";
|
dataDir = if config.networking.hostName == "sisko" then "/mnt/hd/syncthing" else "/home/ccr";
|
||||||
|
@ -16,25 +16,25 @@
|
||||||
picard = {
|
picard = {
|
||||||
id = "XKSCJ46-EM6GIZ7-6ABQTZZ-ZRVWVFM-MJ3QNVG-F5EWHY5-ZUNYVSL-DA77YAG";
|
id = "XKSCJ46-EM6GIZ7-6ABQTZZ-ZRVWVFM-MJ3QNVG-F5EWHY5-ZUNYVSL-DA77YAG";
|
||||||
addresses = [
|
addresses = [
|
||||||
"tcp://picard.wg.aciceri.dev"
|
"tcp://picard.fleet"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
sisko = {
|
sisko = {
|
||||||
id = "QE6V7PR-VHMAHHS-GHD4ZI3-IBB7FEM-M6EQZBX-YFCWDAK-YCYL6VO-NNRMXQK";
|
id = "TOC7QXZ-JLB4LYP-VNIJAV5-DCKVGFN-UE45SPX-PPFJHSG-O3UHFCK-2PEMAQ6";
|
||||||
addresses = [
|
addresses = [
|
||||||
"tcp://sisko.wg.aciceri.dev"
|
"tcp://sisko.fleet"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
kirk = {
|
kirk = {
|
||||||
id = "OVPXSCE-XFKCBJ2-A4SKJRI-DYBZ6CV-U2OFNA2-ALHOPW5-PPMHOIQ-5TG2HAJ";
|
id = "OVPXSCE-XFKCBJ2-A4SKJRI-DYBZ6CV-U2OFNA2-ALHOPW5-PPMHOIQ-5TG2HAJ";
|
||||||
addresses = [
|
addresses = [
|
||||||
"tcp://kirk.wg.aciceri.dev"
|
"tcp://kirk.fleet"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
oneplus8t = {
|
oneplus8t = {
|
||||||
id = "KMB2YRF-DGTWU24-SLITU23-5TN7BMQ-6PFAQQZ-CZ7J2QL-PIGVBTU-VRFRMQV";
|
id = "KMB2YRF-DGTWU24-SLITU23-5TN7BMQ-6PFAQQZ-CZ7J2QL-PIGVBTU-VRFRMQV";
|
||||||
addresses = [
|
addresses = [
|
||||||
"tcp://oneplus8t.wg.aciceri.dev"
|
"tcp://oneplus8t.fleet"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
download-dir = "/mnt/hd/torrent";
|
download-dir = "/mnt/hd/torrent";
|
||||||
incomplete-dir = "/mnt/hd/torrent/.incomplete";
|
incomplete-dir = "/mnt/hd/torrent/.incomplete";
|
||||||
|
|
||||||
download-queue-enabled = false;
|
|
||||||
|
|
||||||
rpc-bind-address = "0.0.0.0";
|
rpc-bind-address = "0.0.0.0";
|
||||||
peer-port = 51413; # Forward both TCP and UDP on router traffic from router
|
peer-port = 51413; # Forward both TCP and UDP on router traffic from router
|
||||||
rpc-whitelist-enabled = false;
|
rpc-whitelist-enabled = false;
|
||||||
|
@ -41,20 +39,11 @@
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd.tmpfiles.rules = [
|
systemd.tmpfiles.rules = [
|
||||||
"d /mnt/hd/torrent 774 transmission transmission"
|
"d /mnt/hd/torrent 770 transmission transmission"
|
||||||
"d /mnt/hd/torrent/.incomplete 774 transmission transmission"
|
"d /mnt/hd/torrent/.incomplete 770 transmission transmission"
|
||||||
];
|
];
|
||||||
|
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
config.services.transmission.home
|
config.services.transmission.home
|
||||||
];
|
];
|
||||||
|
|
||||||
services.nginx.virtualHosts."torrent.sisko.wg.aciceri.dev" = {
|
|
||||||
forceSSL = true;
|
|
||||||
useACMEHost = "aciceri.dev";
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${builtins.toString config.services.transmission.settings.rpc-port}";
|
|
||||||
};
|
|
||||||
serverAliases = [ "torrent.sisko.zt.aciceri.dev" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
config,
|
config,
|
||||||
|
vpn,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
@ -22,4 +24,9 @@
|
||||||
privateKeyFile = config.age.secrets."${config.networking.hostName}-wireguard-private-key".path;
|
privateKeyFile = config.age.secrets."${config.networking.hostName}-wireguard-private-key".path;
|
||||||
listenPort = 51820;
|
listenPort = 51820;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
networking.hosts = lib.mapAttrs' (hostname: vpnConfig: {
|
||||||
|
name = vpnConfig.ip;
|
||||||
|
value = [ "${hostname}.fleet" ];
|
||||||
|
}) vpn;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
networking.nat.enable = true;
|
networking.nat.enable = true;
|
||||||
|
|
||||||
networking.firewall.allowedUDPPorts = [ config.networking.wireguard.interfaces.wg0.listenPort ];
|
networking.firewall.allowedUDPPorts = [ config.networking.wireguard.interfaces.wg0.listenPort ]; # FIXME move this to wireguard-server
|
||||||
|
|
||||||
networking.wireguard.interfaces.wg0 = {
|
networking.wireguard.interfaces.wg0 = {
|
||||||
ips = [ "${vpn.${config.networking.hostName}.ip}/24" ];
|
ips = [ "${vpn.${config.networking.hostName}.ip}/24" ];
|
||||||
|
|
|
@ -1,51 +1,20 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
xdg = {
|
xdg = {
|
||||||
autostart.enable = true;
|
|
||||||
menus.enable = true;
|
|
||||||
mime.enable = true;
|
|
||||||
icons.enable = true;
|
|
||||||
portal = {
|
portal = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configPackages = with pkgs; [
|
configPackages = with pkgs; [
|
||||||
# xdg-desktop-portal-wlr
|
xdg-desktop-portal-wlr
|
||||||
# xdg-desktop-portal-gtk
|
xdg-desktop-portal-gtk
|
||||||
# xdg-desktop-portal-hyprland
|
xdg-desktop-portal-hyprland
|
||||||
xdg-desktop-portal-gnome
|
|
||||||
# xdg-desktop-portal
|
|
||||||
# kdePackages.xdg-desktop-portal-kde
|
|
||||||
# libsForQt5.xdg-desktop-portal-kde
|
|
||||||
gnome-keyring
|
|
||||||
];
|
];
|
||||||
extraPortals = with pkgs; [
|
extraPortals = with pkgs; [
|
||||||
# xdg-desktop-portal-wlr
|
xdg-desktop-portal-wlr
|
||||||
# xdg-desktop-portal-gtk
|
xdg-desktop-portal-gtk
|
||||||
# xdg-desktop-portal-hyprland
|
xdg-desktop-portal-hyprland
|
||||||
xdg-desktop-portal-gnome
|
|
||||||
# xdg-desktop-portal
|
|
||||||
# kdePackages.xdg-desktop-portal-kde
|
|
||||||
gnome-keyring
|
|
||||||
];
|
];
|
||||||
xdgOpenUsePortal = true;
|
xdgOpenUsePortal = true;
|
||||||
wlr.enable = true;
|
wlr.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
|
|
||||||
security.polkit.enable = true;
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
|
||||||
systemd.user.services.niri-flake-polkit = {
|
|
||||||
description = "PolicyKit Authentication Agent provided by niri-flake";
|
|
||||||
wantedBy = [ "niri.service" ];
|
|
||||||
after = [ "graphical-session.target" ];
|
|
||||||
partOf = [ "graphical-session.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";
|
|
||||||
Restart = "on-failure";
|
|
||||||
RestartSec = 1;
|
|
||||||
TimeoutStopSec = 10;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
{ config, lib, ... }:
|
|
||||||
{
|
|
||||||
services.zerotierone = {
|
|
||||||
enable = true;
|
|
||||||
joinNetworks = [ "632ea29085af0cb4" ];
|
|
||||||
};
|
|
||||||
environment =
|
|
||||||
if (config.networking.hostName == "sisko") then
|
|
||||||
{
|
|
||||||
persistence."/persist".directories = [
|
|
||||||
"/var/lib/zerotier-one"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ };
|
|
||||||
}
|
|
|
@ -2,8 +2,8 @@ host=${1-picard}
|
||||||
|
|
||||||
nixos-rebuild switch \
|
nixos-rebuild switch \
|
||||||
--flake ".#${host}" \
|
--flake ".#${host}" \
|
||||||
--target-host "root@${host}.wg.aciceri.dev" \
|
--target-host "root@${host}.fleet" \
|
||||||
--build-host "root@${host}.wg.aciceri.dev" \
|
--build-host "root@${host}.fleet" \
|
||||||
--option warn-dirty false \
|
--option warn-dirty false \
|
||||||
--fast \
|
--fast \
|
||||||
"${@:2}"
|
"${@:2}"
|
||||||
|
|
|
@ -19,7 +19,7 @@ let
|
||||||
cp $f $out/"libtree-sitter-$(basename $f)"
|
cp $f $out/"libtree-sitter-$(basename $f)"
|
||||||
done
|
done
|
||||||
'';
|
'';
|
||||||
emacsWithoutPackages = pkgs'.emacs-unstable.override {
|
emacsWithoutPackages = pkgs'.emacs-git.override {
|
||||||
withSQLite3 = true;
|
withSQLite3 = true;
|
||||||
withWebP = true;
|
withWebP = true;
|
||||||
withPgtk = true;
|
withPgtk = true;
|
||||||
|
|
|
@ -10,7 +10,6 @@ let
|
||||||
version = args.src.rev;
|
version = args.src.rev;
|
||||||
propagatedUserEnvPkgs = args.deps;
|
propagatedUserEnvPkgs = args.deps;
|
||||||
buildInputs = args.deps;
|
buildInputs = args.deps;
|
||||||
postInstall = args.postInstall or "";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# *Attrset* containig extra emacs packages
|
# *Attrset* containig extra emacs packages
|
||||||
|
@ -45,69 +44,6 @@ let
|
||||||
};
|
};
|
||||||
deps = [ elpaPackages.heap ];
|
deps = [ elpaPackages.heap ];
|
||||||
};
|
};
|
||||||
copilot = buildEmacsPackage {
|
|
||||||
name = "copilot";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "copilot-emacs";
|
|
||||||
repo = "copilot.el";
|
|
||||||
rev = "b7bff7b934837744688fd74191ecffb83b3bcc05";
|
|
||||||
hash = "sha256-MEsjXQIeiTI6NXN5rTW7HfFPC18IZnhAssma2BZa0ks=";
|
|
||||||
};
|
|
||||||
deps = with epkgs; [
|
|
||||||
s
|
|
||||||
dash
|
|
||||||
editorconfig
|
|
||||||
jsonrpc
|
|
||||||
f
|
|
||||||
];
|
|
||||||
};
|
|
||||||
lean4-mode = buildEmacsPackage {
|
|
||||||
name = "lean4-mode";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "leanprover-community";
|
|
||||||
repo = "lean4-mode";
|
|
||||||
rev = "76895d8939111654a472cfc617cfd43fbf5f1eb6";
|
|
||||||
hash = "sha256-DLgdxd0m3SmJ9heJ/pe5k8bZCfvWdaKAF0BDYEkwlMQ=";
|
|
||||||
};
|
|
||||||
deps = [
|
|
||||||
epkgs.dash
|
|
||||||
melpaPackages.magit
|
|
||||||
melpaPackages.lsp-mode
|
|
||||||
];
|
|
||||||
postInstall = ''
|
|
||||||
cp -r $src/data $LISPDIR
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
kdl-ts-mode = buildEmacsPackage {
|
|
||||||
name = "kdl-ts-mode";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "dataphract";
|
|
||||||
repo = "kdl-ts-mode";
|
|
||||||
rev = "3dbf116cd19261d8d70f456ae3385e1d20208452";
|
|
||||||
hash = "sha256-4bfKUzzLhBFg4TeGQD0dClumcO4caIBU8/uRncFVVFQ=";
|
|
||||||
};
|
|
||||||
deps = [ ];
|
|
||||||
};
|
|
||||||
ultra-scroll = buildEmacsPackage {
|
|
||||||
name = "ultra-scroll";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "jdtsmith";
|
|
||||||
repo = "ultra-scroll";
|
|
||||||
rev = "78ab497c6568e4a99f34a84b4c9bfe87d1a71d8c";
|
|
||||||
hash = "sha256-q/LGP69GRtEEbSpXi9JUoZjr/UV1QMVjQw96M6qxsZU=";
|
|
||||||
};
|
|
||||||
deps = [ ];
|
|
||||||
};
|
|
||||||
eglot-booster = buildEmacsPackage {
|
|
||||||
name = "eglot-booster";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "jdtsmith";
|
|
||||||
repo = "eglot-booster";
|
|
||||||
rev = "e6daa6bcaf4aceee29c8a5a949b43eb1b89900ed";
|
|
||||||
hash = "sha256-PLfaXELkdX5NZcSmR1s/kgmU16ODF8bn56nfTh9g6bs=";
|
|
||||||
};
|
|
||||||
deps = [ ];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# *List* containing emacs packages from (M)ELPA
|
# *List* containing emacs packages from (M)ELPA
|
||||||
|
@ -132,6 +68,7 @@ let
|
||||||
ligature
|
ligature
|
||||||
treemacs-nerd-icons
|
treemacs-nerd-icons
|
||||||
eshell-syntax-highlighting
|
eshell-syntax-highlighting
|
||||||
|
fish-completion # fish completion for eshell
|
||||||
eshell-prompt-extras
|
eshell-prompt-extras
|
||||||
eshell-atuin
|
eshell-atuin
|
||||||
eshell-command-not-found
|
eshell-command-not-found
|
||||||
|
@ -147,17 +84,7 @@ let
|
||||||
embark
|
embark
|
||||||
embark-consult
|
embark-consult
|
||||||
magit
|
magit
|
||||||
(magit-delta.override (old: {
|
magit-delta
|
||||||
# FIXME why is this needed?
|
|
||||||
melpaBuild =
|
|
||||||
args:
|
|
||||||
old.melpaBuild (
|
|
||||||
args
|
|
||||||
// {
|
|
||||||
packageRequires = (args.packageRequires or [ ]) ++ [ dash ];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}))
|
|
||||||
magit-todos
|
magit-todos
|
||||||
difftastic
|
difftastic
|
||||||
with-editor
|
with-editor
|
||||||
|
@ -181,10 +108,8 @@ let
|
||||||
markdown-mode
|
markdown-mode
|
||||||
haskell-mode
|
haskell-mode
|
||||||
terraform-mode
|
terraform-mode
|
||||||
rust-mode
|
|
||||||
diredfl
|
diredfl
|
||||||
org-modern
|
org-modern
|
||||||
math-preview
|
|
||||||
org-roam
|
org-roam
|
||||||
org-roam-ql
|
org-roam-ql
|
||||||
org-roam-ui
|
org-roam-ui
|
||||||
|
@ -204,9 +129,6 @@ let
|
||||||
telega
|
telega
|
||||||
aggressive-indent
|
aggressive-indent
|
||||||
mixed-pitch
|
mixed-pitch
|
||||||
visual-replace
|
|
||||||
org-super-agenda
|
|
||||||
tidal
|
|
||||||
# org-re-reveal # FIXME very not nice hash mismatch when building
|
# org-re-reveal # FIXME very not nice hash mismatch when building
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -223,9 +145,6 @@ let
|
||||||
eat
|
eat
|
||||||
corfu-terminal
|
corfu-terminal
|
||||||
haskell-ts-mode
|
haskell-ts-mode
|
||||||
])
|
|
||||||
++ (with epkgs; [
|
|
||||||
typst-ts-mode # why this doesn't seem to be in elpaPackages?
|
|
||||||
]);
|
]);
|
||||||
in
|
in
|
||||||
mainPackages ++ (builtins.attrValues extraPackages)
|
mainPackages ++ (builtins.attrValues extraPackages)
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
# Stolen from https://github.com/nyanmisaka/ffmpeg-rockchip
|
|
||||||
|
|
||||||
{
|
|
||||||
ffmpeg-full,
|
|
||||||
fetchFromGitHub,
|
|
||||||
lib,
|
|
||||||
fetchpatch2,
|
|
||||||
gmp,
|
|
||||||
amf-headers,
|
|
||||||
libiec61883,
|
|
||||||
libavc1394,
|
|
||||||
meson,
|
|
||||||
ninja,
|
|
||||||
stdenv,
|
|
||||||
fetchurl,
|
|
||||||
cmake,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
ffmpeg-rockchip-version = "7.1";
|
|
||||||
|
|
||||||
rga_commit = "d7a0a485ed6c201f882c20b3a8881e801f131385";
|
|
||||||
librga-multi = stdenv.mkDerivation {
|
|
||||||
pname = "librga-multi";
|
|
||||||
version = "1.10.0";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://github.com/JeffyCN/mirrors/archive/${rga_commit}.tar.gz";
|
|
||||||
hash = "sha256-WjNxVfLVW8axEvNmIJ0+OCeboG4LiGWwJy6fW5Mkm5Y=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# In Nixpkgs, meson comes with a setup hook that overrides the configure, check, and install phases.
|
|
||||||
# https://nixos.org/manual/nixpkgs/stable/#meson
|
|
||||||
nativeBuildInputs = [
|
|
||||||
meson
|
|
||||||
ninja
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
(fetchpatch2 {
|
|
||||||
name = "normalrga-cpp-add-10b-compact-endian-mode.patch";
|
|
||||||
url = "https://raw.githubusercontent.com/7Ji-PKGBUILDs/librga-multi/615fb730b7656ad4a0cb169bfa9a52336820f99f/normalrga-cpp-add-10b-compact-endian-mode.patch";
|
|
||||||
hash = "sha256-JvKZCBjWtkEsfx1Xsnysw9PjC3/60f1ni10tmR8fTHQ=";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Rockchip RGA User-Space Library";
|
|
||||||
license = licenses.asl20;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
mpp = stdenv.mkDerivation {
|
|
||||||
pname = "mpp";
|
|
||||||
version = "1.0.8";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "rockchip-linux";
|
|
||||||
repo = "mpp";
|
|
||||||
rev = "1.0.8";
|
|
||||||
hash = "sha256-y1vWGz7VjwL02klPQWwoIh5ExpvS/vsDUHcMtMznVcI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [ cmake ];
|
|
||||||
|
|
||||||
configurePhase = ''
|
|
||||||
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$out
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
cmake --build build
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
cmake --install build
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Media Process Platform (MPP)";
|
|
||||||
homepage = "https://github.com/rockchip-linux/mpp";
|
|
||||||
license = licenses.asl20;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
|
|
||||||
(ffmpeg-full.override {
|
|
||||||
version = ffmpeg-rockchip-version; # Important! This sets the ABI.
|
|
||||||
source = fetchFromGitHub {
|
|
||||||
owner = "nyanmisaka";
|
|
||||||
repo = "ffmpeg-rockchip";
|
|
||||||
rev = "f5c7e0d63b52b4526b4251e2fcb2071f73367ed6";
|
|
||||||
hash = "sha256-JM/YCvXS49jYz4oF0Ux/aGzrRzKHrD8N/Xm99gXLcqg=";
|
|
||||||
};
|
|
||||||
withVulkan = false;
|
|
||||||
}).overrideAttrs
|
|
||||||
(old: {
|
|
||||||
pname = "ffmpeg-rockchip";
|
|
||||||
|
|
||||||
patches = [ ];
|
|
||||||
# patches = old.patches ++ [
|
|
||||||
# (fetchpatch2
|
|
||||||
# {
|
|
||||||
# name = "add-av_stream_get_first_dts-for-chromium";
|
|
||||||
# url = "https://raw.githubusercontent.com/7Ji-PKGBUILDs/ffmpeg-mpp-git/b32080c1992313df0e543440c6d70d351120fa36/add-av_stream_get_first_dts-for-chromium.patch";
|
|
||||||
# hash = "sha256-DbH6ieJwDwTjKOdQ04xvRcSLeeLP2Z2qEmqeo8HsPr4=";
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# (fetchpatch2
|
|
||||||
# {
|
|
||||||
# name = "flvdec-handle-unknown";
|
|
||||||
# url = "https://raw.githubusercontent.com/obsproject/obs-deps/faa110d336922831b5cdc261a9559e3a2dd5db3c/deps.ffmpeg/patches/FFmpeg/0001-flvdec-handle-unknown.patch";
|
|
||||||
# hash = "sha256-WlGF9Uy89GcnY8zmh9G23bZiVJtpY32oJiec5Hl/V+8=";
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# (fetchpatch2
|
|
||||||
# {
|
|
||||||
# name = "libaomenc-presets";
|
|
||||||
# url = "https://raw.githubusercontent.com/obsproject/obs-deps/faa110d336922831b5cdc261a9559e3a2dd5db3c/deps.ffmpeg/patches/FFmpeg/0002-libaomenc-presets.patch";
|
|
||||||
# hash = "sha256-1fFBDvsx/jHo6QXsPxDMt4Qd1VlMs1kcOyBedyMv0YM=";
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# ];
|
|
||||||
|
|
||||||
configureFlags = old.configureFlags ++ [
|
|
||||||
"--extra-version=rockchip"
|
|
||||||
"--enable-gpl"
|
|
||||||
"--enable-version3"
|
|
||||||
"--enable-libdrm"
|
|
||||||
"--enable-rkmpp"
|
|
||||||
"--enable-rkrga"
|
|
||||||
];
|
|
||||||
|
|
||||||
doCheck = false; # TODO remove (used to get faster builds)
|
|
||||||
|
|
||||||
buildInputs = old.buildInputs ++ [
|
|
||||||
gmp
|
|
||||||
amf-headers
|
|
||||||
libiec61883
|
|
||||||
libavc1394
|
|
||||||
mpp
|
|
||||||
librga-multi
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://github.com/nyanmisaka/ffmpeg-rockchip";
|
|
||||||
license = licenses.gpl3;
|
|
||||||
};
|
|
||||||
})
|
|
|
@ -1,194 +0,0 @@
|
||||||
{
|
|
||||||
stdenv,
|
|
||||||
lib,
|
|
||||||
fetchurl,
|
|
||||||
makeDesktopItem,
|
|
||||||
copyDesktopItems,
|
|
||||||
libXxf86vm,
|
|
||||||
libX11,
|
|
||||||
libXext,
|
|
||||||
libXtst,
|
|
||||||
libXi,
|
|
||||||
libXrender,
|
|
||||||
glib,
|
|
||||||
libxml2,
|
|
||||||
ffmpeg,
|
|
||||||
libGL,
|
|
||||||
freetype,
|
|
||||||
fontconfig,
|
|
||||||
gtk3,
|
|
||||||
pango,
|
|
||||||
cairo,
|
|
||||||
alsa-lib,
|
|
||||||
atk,
|
|
||||||
gdk-pixbuf,
|
|
||||||
gtk2,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
rSubPaths = [
|
|
||||||
"lib/amd64/jli"
|
|
||||||
"lib/amd64/server"
|
|
||||||
"lib/amd64"
|
|
||||||
];
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "ib-tws";
|
|
||||||
version = "10.33.1f";
|
|
||||||
etagHash = "f3ac044774c83917855f484a968c6ad2";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://download2.interactivebrokers.com/installers/tws/latest-standalone/tws-latest-standalone-linux-x64.sh";
|
|
||||||
hash = "sha256-Iq4Bd5LTOajfK3IaomeAZL182lEXkCn7JjEO6UWgdFE=";
|
|
||||||
};
|
|
||||||
|
|
||||||
phases = [
|
|
||||||
"unpackPhase"
|
|
||||||
"installPhase"
|
|
||||||
"fixupPhase"
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [ copyDesktopItems ];
|
|
||||||
|
|
||||||
desktopItems = [
|
|
||||||
(makeDesktopItem {
|
|
||||||
name = pname;
|
|
||||||
desktopName = "IB Trader Workstation";
|
|
||||||
exec = pname;
|
|
||||||
icon = pname;
|
|
||||||
categories = [
|
|
||||||
"Office"
|
|
||||||
"Finance"
|
|
||||||
];
|
|
||||||
startupWMClass = "jclient-LoginFrame";
|
|
||||||
})
|
|
||||||
(makeDesktopItem {
|
|
||||||
name = "ib-gw";
|
|
||||||
desktopName = "IB Gateway";
|
|
||||||
exec = "ib-gw";
|
|
||||||
icon = pname;
|
|
||||||
categories = [
|
|
||||||
"Office"
|
|
||||||
"Finance"
|
|
||||||
];
|
|
||||||
startupWMClass = "ibgateway-GWClient";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
unpackPhase = ''
|
|
||||||
echo "Unpacking I4J sfx sh to $PWD..."
|
|
||||||
INSTALL4J_TEMP="$PWD" sh "$src" __i4j_extract_and_exit
|
|
||||||
|
|
||||||
# JRE
|
|
||||||
jrePath="$out/share/${pname}/jre"
|
|
||||||
echo "Unpacking JRE to $jrePath..."
|
|
||||||
mkdir -p "$jrePath"
|
|
||||||
tar -xf "$PWD/"*.dir/jre.tar.gz -C "$jrePath/"
|
|
||||||
|
|
||||||
echo "Patching JRE executables..."
|
|
||||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
|
||||||
"$jrePath/bin/java" "$jrePath/bin/unpack200"
|
|
||||||
|
|
||||||
echo "Unpacking JRE pack files..."
|
|
||||||
for f in "$jrePath/lib/"*.jar.pack "$jrePath/lib/ext/"*.jar.pack; do
|
|
||||||
jar_file=`echo "$f" | awk '{ print substr($0,1,length($0)-5) }'`
|
|
||||||
"$jrePath/bin/unpack200" -r "$f" "$jar_file"
|
|
||||||
[ $? -ne 0 ] && echo "Error unpacking $f" && exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Unpacking TWS payload..."
|
|
||||||
INSTALL4J_JAVA_HOME_OVERRIDE="$jrePath" sh "$src" -q -dir "$PWD/"
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
# create main startup script
|
|
||||||
mkdir -p "$out/bin"
|
|
||||||
cat<<EOF > "$out/bin/${pname}"
|
|
||||||
#!$SHELL
|
|
||||||
|
|
||||||
# get script name
|
|
||||||
PROG=\$(basename "\$0")
|
|
||||||
|
|
||||||
# Load system-wide settings and per-user overrides
|
|
||||||
IB_CONFIG_DIR="\$HOME/.\$PROG"
|
|
||||||
JAVA_GC="-Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"
|
|
||||||
JAVA_UI_FLAGS="-Dswing.aatext=TRUE -Dawt.useSystemAAFontSettings=on -Dsun.awt.nopixfmt=true -Dsun.java2d.noddraw=true -Dswing.boldMetal=false -Dsun.locale.formatasdefault=true"
|
|
||||||
JAVA_LOCALE_FLAGS="-Dsun.locale.formatasdefault=true"
|
|
||||||
JAVA_FLAGS="\$JAVA_GC \$JAVA_UI_FLAGS \$JAVA_LOCALE_FLAGS \$JAVA_EXTRA_FLAGS"
|
|
||||||
[ -f "\$HOME/.config/\$PROG.conf" ] && . "\$HOME/.config/\$PROG.conf"
|
|
||||||
|
|
||||||
CLASS="jclient.LoginFrame"
|
|
||||||
[ "\$PROG" = "ib-gw" ] && CLASS="ibgateway.GWClient"
|
|
||||||
|
|
||||||
cd "$out/share/${pname}/jars"
|
|
||||||
"$out/share/${pname}/jre/bin/java" -cp \* \$JAVA_FLAGS \$CLASS \$IB_CONFIG_DIR
|
|
||||||
EOF
|
|
||||||
chmod u+x $out/bin/${pname}
|
|
||||||
|
|
||||||
# create symlink for the gateway
|
|
||||||
ln -s "${pname}" "$out/bin/ib-gw"
|
|
||||||
|
|
||||||
# copy files
|
|
||||||
mkdir -p $out/share/${pname}
|
|
||||||
cp -R jars $out/share/${pname}
|
|
||||||
install -Dm644 .install4j/tws.png $out/share/pixmaps/${pname}.png
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
dontPatchELF = true;
|
|
||||||
dontStrip = true;
|
|
||||||
|
|
||||||
postFixup = ''
|
|
||||||
rpath+="''${rpath:+:}${lib.concatStringsSep ":" (map (a: "$jrePath/${a}") rSubPaths)}"
|
|
||||||
|
|
||||||
# set all the dynamic linkers
|
|
||||||
find $out -type f -perm -0100 \
|
|
||||||
-exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
|
||||||
--set-rpath "$rpath" {} \;
|
|
||||||
|
|
||||||
find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \;
|
|
||||||
'';
|
|
||||||
|
|
||||||
rpath = lib.strings.makeLibraryPath libraries;
|
|
||||||
|
|
||||||
libraries = [
|
|
||||||
stdenv.cc
|
|
||||||
stdenv.cc.libc
|
|
||||||
glib
|
|
||||||
libxml2
|
|
||||||
ffmpeg
|
|
||||||
libGL
|
|
||||||
libXxf86vm
|
|
||||||
alsa-lib
|
|
||||||
fontconfig
|
|
||||||
freetype
|
|
||||||
pango
|
|
||||||
gtk3
|
|
||||||
cairo
|
|
||||||
gdk-pixbuf
|
|
||||||
atk
|
|
||||||
libX11
|
|
||||||
libXext
|
|
||||||
libXtst
|
|
||||||
libXi
|
|
||||||
libXrender
|
|
||||||
gtk2
|
|
||||||
];
|
|
||||||
# possibly missing libgdk-x11-2.0.so.0, from gtk2? never caused any trouble though
|
|
||||||
|
|
||||||
passthru.updateScript = ./update.sh;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Trader Work Station of Interactive Brokers";
|
|
||||||
homepage = "https://www.interactivebrokers.com";
|
|
||||||
# license = licenses.unfree;
|
|
||||||
maintainers = lib.optionals (maintainers ? k3a) [ maintainers.k3a ];
|
|
||||||
platforms = [ "x86_64-linux" ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
# Stolen from https://github.com/qbisi/nixos-rockchip
|
|
||||||
|
|
||||||
{
|
|
||||||
stdenv,
|
|
||||||
fetchurl,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
pname = "mali-panthor-g610-firmware";
|
|
||||||
version = "arch10_8";
|
|
||||||
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://gitlab.com/firefly-linux/external/libmali/-/raw/firefly/firmware/g610/mali_csffw.bin";
|
|
||||||
hash = "sha256-56C0b9Z3wy4IwLiBf9HFY8OsoBPax04XaR83O5cNu6s=";
|
|
||||||
};
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
|
|
||||||
dontPatch = true;
|
|
||||||
|
|
||||||
dontConfigure = true;
|
|
||||||
|
|
||||||
dontBuild = true;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
install -Dm644 $src $out/lib/firmware/arm/mali/arch10.8/mali_csffw.bin
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
compressFirmware = false;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -15,9 +15,7 @@ let
|
||||||
rev = "5a3281dee9f889afdeea7263558e7a715dcf5aab";
|
rev = "5a3281dee9f889afdeea7263558e7a715dcf5aab";
|
||||||
hash = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE=";
|
hash = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE=";
|
||||||
};
|
};
|
||||||
|
cargoHash = "sha256-wPV+ZY34OMbBrjmhvwjljbwmcUiPdWNHFU3ac7aVbIQ=";
|
||||||
useFetchCargoVendor = true;
|
|
||||||
cargoHash = "sha256-oGpe+kBf6kBboyx/YfbQBt1vvjtXd1n2pOH6FNcbF8M=";
|
|
||||||
|
|
||||||
patchPhase = ''
|
patchPhase = ''
|
||||||
substituteInPlace src/lib.rs \
|
substituteInPlace src/lib.rs \
|
||||||
|
|
Binary file not shown.
|
@ -1,19 +1,32 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-rsa /AagBw
|
-> ssh-rsa /AagBw
|
||||||
G5326/E4fSslYqgeLBn+nmuWUxw5o6219p96KM66MmIErHvoLBXgV9jgerpJfcuT
|
LejiskurhcggIU/f+WpXpYAU+5Ct+wgO6qLU4l8Zw991t7+LQoDYdZThQt4aFDRY
|
||||||
4EevQaFwaQCvbywZT9YDSEDeM4e0RiAmpAHN8i72hj6F6dF5A8ScwDsE3LqHyNBA
|
/KyNTJD5+SvobJvPpS0vwJeITL6c6wWmlBhx4WlhsCWlSKGz7jKxw4JpNZamfkDN
|
||||||
vSHoDTKi1nuS4qC9gx1LFYG3xGnCaQ2oN2UJV7O3V8KUqR5IqDCGB6+/5RDRoXmX
|
fDt7RKJI9fxoDIJGVi5BjScR7GfryzpXFu5txVx+Hp8sWckl4US9sPxTGxJ/Qbc6
|
||||||
Kc52VY2OOA9n4Eqz6y0aQSlSUQ1iWejzgjE53cOL/Cyb6g1GblOWknxlvnCk6uzP
|
0QFAO+qnm8FqtZWH1GZiJ2IAqc/sD6FHfd3aKtQ0PTuHoq11L0iSWRAJr/eW2EGJ
|
||||||
JBU4tBbUFP+WMfnDkwBEuUWj8J2gga/bXohgyFa7Zk2WWtFd+2IFNlm1MiCbKDnm
|
nGEp/y2EUkwDd1z4FcHQHoko7j6f3friNHZH9I2SCALonw+L1SrXHiYgWRx19KAc
|
||||||
pmXmbGcYCPH6xfc1QmVyddEqeqcYlDmVg+0ZaHOZjj4MC344p7wbBsCmfx+Ijc0D
|
xaLu+VjMUQ8LPN1zW9J8sUQWle1AA08x11EKB29hKmXE9clgY7Jx/zKp3EDgLIbU
|
||||||
bhG5VWnXzvWx7HJQlZZlB7zrp2K4vDB2mI9QPmyvgEbZkx9KNO6g83M6tG19hF4Q
|
Pg531bppFse8I0xD6TgQ/yWDZfXTIr3y67dPWxjKf82dDxCKJk8nYW9uIAPjLTdk
|
||||||
garJ83QaWpMlfaClvgNfjZayuBjVTH3jNhRVf5U5p9C9lVx2zDEMaEZ5nL0ayeR4
|
MkqWtsiVi0++HNMQoSlZMOFTiPyCGRGovmThpjpPP5GqGBUQmNDdP2hs1ZYoAmw1
|
||||||
2pN0gSFiyjODEoRY43WUc7qvwBskdNsBpKkICxZjWcuayuO2pCTSoVeeD/YJ/m9a
|
7dlj6PeGF50Pkita966qxbtAX9Ru7fsgYi+E5Mi067fgVSLg1i3Sk1CbSbxqbw5Q
|
||||||
aL1RVyELvbefcUS9A3Nxk5hxMmQlkjgMKpfYGS3QVmmQfTnHcuiJXCAsVkJU3C48
|
BkY1851VMgUBtmjsOGdyDTfITFThHOcjd9lzLrloPLeapOQ9Z6k/wJ7f2A5HyPL4
|
||||||
6SA5387h/shHxaOL9RyTBeC/1qklwOV6kqxwROQbSQ0
|
zTJWZ6zcFBEbfeDtFtntwoaZ247AQAJC9unA2AC0xhM
|
||||||
-> ssh-ed25519 /WmILg I+1/kLgE5kycRCq+75V9rIo35aOWpsrWAkbaZDZ+elQ
|
-> ssh-rsa QHr3/A
|
||||||
5g14cfb+Ig8g9k4mVQ9ar0aycs/8fYMYjZPJZy33fsE
|
rSEk04k0mOPyll5cN5D9ktP9WTb39cUqFX8EGG8BhIWd9xwO7vF1xWXtCzpDOYCv
|
||||||
-> ssh-ed25519 +vdRnA WpaITQ02oRuz8bB+G0sVPCdBzugr9/nLPdsKQptGrjQ
|
PxfqiwCsNcCCNAd1CWYT52PY6P9zaTOV/ptk2U8nhpi8s6EDdyne3z8zR0SS1Wvz
|
||||||
vbfFxDOlUj3FVKXyoawkXorTmPvY1Z75L4f0cP66KDk
|
53Ml1fUjiTguulzANoRnZtEsaqoF0VPW03wjkTl6XUZUrNMC0Kgq6VP1tmt0kn08
|
||||||
--- JdH2zcNZJNeRPZNA4EvSMcnbO4nMZy1QT+DyDsZsgOY
|
eGuD/P8BGiaaKAVN1iJK6U58O43Y4uB0od913BgALKsBjtcH4WvHcgcF359YrdNx
|
||||||
_31ĚđeâżMH´8Uů޶á±qs˘có2‡Ú1Tçn⾯(NV¨
¶Ęr+;7<>ňweMTý<54>Ä|—OĹWö¦ćmĄ»b[Şč±őŽQ'j“€qĘrLG¤¨6a5F>µGjČ
|
qwQkiWTDjDtuOKm9djuZyuewosRAYsCZmHONmNnMGMVeZbcUipFMHsjeU3CfidaE
|
||||||
|
pfxnAqB2G8x1M8qg9w7IiOxH5cH/qcfGk9yIxt25E0pyvaLziYCsKxzhuwnPW5sR
|
||||||
|
ZOgIeECljKTywStX13/ze1hlWikj5ej3JerEbKn1WOD8NEV2vPP/9G9EHLJth2fT
|
||||||
|
Si+2ZosRyWPmg1M391Dlr99Rjb/mXCtW3XBX9GeuL/puwg3I9QnGo5CQHx+GarhW
|
||||||
|
RBcRO9SAYhoQtxba0/0mm80RxKn8Tdbe5ej6yzD7gdkywTArIRM/rMLLyKi2Im/k
|
||||||
|
lDDDIjYp+fje0iUaQQO6K+hhW01EnG2HrELdq/VYs01tclGPdK6lI3lloeOXJ96c
|
||||||
|
crlJfD+b5tK06w91w89w+itqUPIgZsbiq5qVFhfKyRY
|
||||||
|
-> ssh-ed25519 /WmILg RogWvabCGwzKFKQ78EVKpnpupZr5tKOXNsL6mpE1pzg
|
||||||
|
QQcSAgC6Lb/Fk9eYG1q+o12ty/KyhFJbZyVB+3ANSxY
|
||||||
|
-> ssh-ed25519 +vdRnA jBfvf1o18lTbKfx2tKMzUJBmws8s5MMwGDlhUDHn5zY
|
||||||
|
nZLNNbcy21SXXlTLT1tCRDfvlYOE347p6R4CLmEiWw8
|
||||||
|
--- xARfOI6GMc1FZ580lD6fGWmk2AjJVIoxsD+YETvcT0o
|
||||||
|
mBË'ÂÚ‘ë"q
|
||||||
|
űoŮ3»fŁôŤ˝xŇůđn_lÝëG‚'¬U5‡:?˘QźÉ§q-ržÁLTvÇśÓđ~'ІiÎ{Ç…Učá8Ţ!ó±xí_8P©ąaNxd°UŻ®€ý
|
|
@ -1,18 +1,31 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-rsa /AagBw
|
-> ssh-rsa /AagBw
|
||||||
rWU4MBPVO+M7FPMzApYCDMs3hDRNTEH0lCTFiHHRi5GIWVtxRerOfoCh3M++FICS
|
P7Wn4/FoKxWdlxKlaSW05cajdFzxCZZaASHvHHvzJGxPsX/gmCXpsZ7nFZlJvtfV
|
||||||
vErr1NOhTHgznXSLUi8LROC4CHtPBxJUA97yijzmWmcRRnemm5dUcI6xfsiNPRFZ
|
ENGjG0inZZhegfNue/VMiH29ovq9+hjl5o9uZlUBVDoYAU4lthej89CCbbwlbxrT
|
||||||
JhMCTgT2USEjHTejVzHBl/kfggpAiFmBX8RvOVwaX1mGhZ4QEGePfl0n1l3KZfsb
|
AdKurfwWiBPp7N6WQN//TrWuLgyxnUeGV0BdWZjUeS6df20RDCWRcm34MugO4pDh
|
||||||
recANprjssuAzvB+Vj20NTgjtlGYV9QmFGPTs3xCy+9n9IUB3NWAdflE3omdndco
|
S587curSguesGm6N6LF7QpyXyeR00OGNWvh5709EKIveDh7iwGZ+NAvucI7hjxbP
|
||||||
zL8OSCOEXxvrqXaokLbESG1x/RPlT4hNRPBmNB057GJxaC94zOVYc75WwjX3iED5
|
Q7puN6G/SbBVA5dPQHwP+IAL0I5omeBNx+HLrjMM6ArTUNfMjhbii5b16eTKQQp0
|
||||||
f4jczIYWRVwJcA2B1B64dQB7HhX7LOmxNARF4R/d9lao+hXE28IUcIR8e62nDO2i
|
BIyXh346Dk4RD9i3az8THEOk3TGUh84jCMCTcW/rYGprz4iPaC9LNhIso8wnnGzE
|
||||||
jeDV0zv2bwO3q+3FAAz04reR3nILIbPZ7r/fmPjFQNRLNxkRQ3Ba3PtrA14pOptI
|
xaAiIeThrrcRrWBxU6FC1ACRgiSXrI/MgPisTHJqU5AkxcL3N/bd24dXJWj3+ZLa
|
||||||
a4LFTCJo3XwMjDfRNckb1s1K84qyXun2VOhVStGBlhoHDM70KalNRykQqL51+GEH
|
iPyhHGCfoPkoyeKLlDVdWzygVHSr5FLH4Dyxv0WOM7MrnkxVD4jQwAtXu8QsB+k8
|
||||||
jZtsj8DM9ErY3oNfrmMDVS4fahb7S0LLsmj08iMLRNfxuUm1X+WO3V3oSI8HF7Y3
|
2E/KRS0lPmklY5vWgPXq7jnnOztk3OUCaXhJsOo+nAjLlslpJJz9WLryzEY+ojYj
|
||||||
br4+YtKCPPi0gsH03uH757WllNmx+VI2oZuKmt+yEqreb2EtMTywASNANazGd3k3
|
p90EHuhfnVx/H7J7BpsdWAjN38cFEOsMIC6QDPEa/P43RoejYcebM/i1hsXdz1HK
|
||||||
jTm+L1qBNmhRWMA7abl05xG9f/nTneaxzSxkraElWIE
|
3FcimDGmMR9jYoERUlBONZOGn2WuxjPJ292ehaQnXQ0
|
||||||
-> ssh-ed25519 q+UPnA RD50yXDxXVYGmYUZ1ORy6zMVaTqBdzKmitvYNdTCXRI
|
-> ssh-rsa QHr3/A
|
||||||
Yxi5TEquvJO1X7fRR+TkJrxbbc3R7wBKzCX6DNI/5f8
|
ta6ztr+/tCBmQKGub2ZCB79SrN6Nna3fxStfGaLqgmEUsnM2kAh6Hp9+W3jbFEWM
|
||||||
--- ctmSdUA9UXwm2OpTPTKSOJmOQOonUZ3fJXOSRuWEwcQ
|
5L2mMusmoytYtXcR/JjAK8F199p/TrJifXHTnot6dmHKm428tauFRjMxsbWsaT6i
|
||||||
ƒ›‡¡¶ÛÛ¯ò
|
X2rqtrIwXW6QEUFuya+WHI6t29aMZipzmhXjpTdcWyorUyGyNo9YaOt5ohRXzTPW
|
||||||
·y»¾^ó2>E
ÙËnAÇLÌÆÍ4bgÂ¥õäþë%Œ½«¨Jö»JElC"ç7/T<>?n!”'LÈIçx6jOùèŽöV¯Ô¤=°ó–Ó‚Ù*¤{—É`ñºQšÄÖO4M.ÀÆ<C380>j±¿AQXjF-“rëëõ™÷™Z<E284A2>6÷'¸ê
|
f3ELf1aYVBZMxXmVC6E4cbH8dOWKlus/TPTcOirJzR0m3KjeAr5CNRct2qIVxixT
|
||||||
|
WMViwu9xQgWjcUfra8YKO8LEBf/PaEk5BeszIHt7qwWr9sJt4v+206LNQvW8row/
|
||||||
|
sIgdllzVklaqZtkukger7FHkxSasQXLdP1DPE9h4bwSN1H2pEMgJlAVGt8/m4n6T
|
||||||
|
w5qUeDr2HV5kuz/kjdJl1hv6Ihf4de6yS2+7jtMN1FnICIVq67A/shsvA/JDNoOz
|
||||||
|
kLM4WdgBVsqtGCEfmXQCRbz96yBb+ie3N8raJDKhNwWuQ4f3YJNwpVKmySrfUTly
|
||||||
|
WFjWeuTDXv8LwHbUWtzFaXBmoS97EIlRibZqK0caOpmUU+doG03vDlJskfEfBD00
|
||||||
|
nKBPTIiKGoQkbnhMl8YMW7uqhZVvJbPtPGUCpq2w87Um0lh5BuvBTPxNEQ26A/sJ
|
||||||
|
XDByA5rIZqVIw29CjhBsZptR83nhFSa3OUshxoYR6xY
|
||||||
|
-> ssh-ed25519 q+UPnA Y8JxsQsN0qxfPDBVhiVuUYL3OImhUc4RyRpxr4Fff1E
|
||||||
|
Ai1PLAYzoCrm6H9P+U/jA93IE0Mgc2B71AraDnsB6Lc
|
||||||
|
--- EAiuid1wt44o2ZGCLWO0tCcWm2ao7CuHrYdGmYx+yFQ
|
||||||
|
ƒðE'Ú¨Jý'î”êÈT\¡ˆ…S0:#z<>
|
||||||
|
Í×íý®Ù`¥ä˵˜àÍiaG‰…vBs“©…Ú;éÒC×ÉH=Å™‡Nu Ê©ßòR3¯×ŠBz‡Ç…ç†ïŽ»+¡×c†7%†Z¾u›w)jÕ;ø¹iœ²:·•Ås
|
||||||
|
KäŽi„a=#/O·)4ªï
|
Binary file not shown.
Binary file not shown.
|
@ -1,17 +1,30 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-rsa /AagBw
|
-> ssh-rsa /AagBw
|
||||||
hD7PDjueXimBVI/rjcYxN77LHV2eGytKcUbmh17aSL1CNM+eriURFao3tj52Hiaz
|
K5GB/dRGaRFYq0dxuUFPubpdceMq6jOGSWuFuKgtRbtvC+P7qd8g56AZYTyo97jZ
|
||||||
3VMB6FxWUk9kzgjMPvf5WZukuZ2WbpPH8xlDV+6ZH7e/IzmjIfx8Ny14Mr1IF/Rx
|
oAsl8bF3wifrPN73SzCoGba1lCmpDZLCPllNd5RZL1bcAGBj9eDAA1zihYnnO7s+
|
||||||
TBiCIAM19/1/mR9MiIBW85bb+Bb/waWIZAgxW3N1RpqH5+vAVqx0iY3XRF5+0gOq
|
r8L8JSJ/P76AZ3JRhylU0KjgkX1TnVSIsJ/wCQGbdw+KrTuam/3zjzLXEptn2U26
|
||||||
blP3yEw3QaL6FuY0+a+d/TnCsrz2Gi1Rba9oCUmkzOP96TsJYdN58Ut6nrHFkURK
|
oQ4AuzWVGWtyrAKyJfRDWQQUGDwgXMB1h+7XZMm3G1eu6Wm7vuFEQLjaocFE9tO0
|
||||||
mShL2xBMLmfA8Z5ep+D8ueyQbcYpeU3KHcIcRM6dRTwQKvWXAVkRt1nUGasKrO9Y
|
8lnU3IEzXtn1NrutmiIJSoDyGk/PeRdvu2fZWY9oKRxkCA2q0fOca9ArcAP7Wr8a
|
||||||
oJT9BrcxjtqgF/xhHRjWpamjFSI3mlJnJNEbruddDwQUccrJOvEzvqZ7GK0WoFX2
|
+/2usaZ/wsc2fzqDQU2XoFutIU0qwvX6DtDmfb8RhMNrkj2HiR2MluYo+NqQqMOJ
|
||||||
HmhdDOiocMGWFeBPAKlNtU3+QmtZvhvOIgbjKhNxmCt1A/qxfvRk7Y2IDIBo+CFo
|
7kMS22yE1Z6akvpeHo1GZ15HczQatIXXSr4DFGlF7CG0ASNbjR+2Qzws+EmZ2WGX
|
||||||
sKMrT1tCo4UYaJdZYl64XYNCQb3C2EfO7Exrq3d2urNidzUbr9OBx7CCI1nu375c
|
Ad8D9aq5DYOr9xvUdZn66NwyFyyo7FRMoXRFNL01sxJUBpu1wVkKECa8DK0GTIzz
|
||||||
Qol9Kr28fLtxRuSZlrqIe9vKVYyLDPznrRlh6TmgqmMLIW70Y8cZwMtT8L8sOkcm
|
u+qRWtD9WxJkAodW1NmE2F08HIy//exP0L/L6laAjIrDZTle12Nrk6n9ke1UUBIo
|
||||||
A8MoxpWFzK4BKo0Iqmw6eZ3nx/0LAzkz005ZEwrmi2W/XxOWJgBiaLmu7YwnoGq0
|
zU0RdY9HT+DAqScViGdbitv4Z+GYNWWkZfpW8O56S+B/0rmZZ6UQ8VB8GopUecBt
|
||||||
gzwwvA5V5MT6Iy7FzkQpMi0h/H4MZ0mcbihKdPun85Q
|
E14rynpvnd2A6+WlUWcft2Uwl1i7jL3IARO1F3LTsS4
|
||||||
-> ssh-ed25519 +vdRnA 23Gviu8hfWCEBPHP7xYIaOx34kFsxJJgJ/BNUDlb9Cg
|
-> ssh-rsa QHr3/A
|
||||||
ROiMY2gw/rpNBmJnlRVb7Qhi5+8TY3Velj8gEZcaedI
|
Kh/yF7CW7lKTsn6JK4vX2SNyiH66JdB+oVYTFdc2efJYTXVLuj7ITK8EMP3dV267
|
||||||
--- dhmvfQoCjuRUJtvXNI/eCjH0W+IeJm8bFRvYk1JihD0
|
+D4UM3jcn8wOTeTjXIo8P01IOspGxslfC4J+Yol8K+1JA2BjB0diwzhQbkOEyxJ6
|
||||||
qMCĐ,Ý<7F>˝Ôťęě‹9-\‘K<E28098>Jˇă]Á˙J đ˝(ˇSnź°.ńQpá~Z$ó±eŘ"ęí”’\ůŁ'rS’l‰˙uÜ
+UD <äŐŤvĐÚáÓ]|/g[† W_“Č>-fl•›8|wĘŮŠČlš–˘ÜőB•[\ňá.k(W±{=w 3N}¤qGĎ-w´Mb^‰ŚQ{
|
R0uymJYXjtl8Cjx2mlyNMybG8QZYypPhdKosBRn/KELxInGsWHm4MV3XQ+w2fr9Q
|
||||||
|
xHIKvz/8QabgzodHwFbMjp29B4MJUSIkl+uxyTULQMcoOCJ5Ip5BqA+VZsFRD8zV
|
||||||
|
4dePanMQHPXIMnm3POZy3hq/M4FcwWkdJLvz3zyVDuW6mWdiOgA0k1AGpGIFTXeM
|
||||||
|
bKclRUlgL9n7C/dEh5pcKLbEeh5HSf+2izn7PAA90zAQl8++2+iYMHEIQL/Ft6LH
|
||||||
|
XnAsNR4rwnVdWu8BlyEhIPev1GgSp3wOc9eQ6TA16RO4ND1ItnLVauAmvDN4rUWI
|
||||||
|
0wc9Utgwxy4MNhypRLnRXKc555pNpsL1aoA+vcbHfxW1MiW7zviIz2z/RXBR77ut
|
||||||
|
x9kekkP+LEgMHWD4XCGidM2sMrKfKDDblb+YGKxRcdFlELQa0jHH1mcvU5YC4oY2
|
||||||
|
IhYhWeEvyQOr21cP885Psu8IvSpaZVA0tOEdrEXNTa5+S495IGplp8YuxdjW6dz1
|
||||||
|
trDcKVSXNsjqLtpl0CrPY8pSPRIEvUJgBcHUxB3+E/U
|
||||||
|
-> ssh-ed25519 +vdRnA lCY+mIpl7nNGi4wD5Z2CJPlIpqTECUyOncW+FuKzqxs
|
||||||
|
3g0+X5fVGjo+EnETlDlO1VQl83Loi4bEBHshRz1/q0A
|
||||||
|
--- iUTAy7LeDZTABLGEMw/Bkc/qbujLcdpHdQ/TuodhmaM
|
||||||
|
Ó¤ºþµ½;{Ö?‡®Ã`t™Ö8<C396>+—‡þtÿý0m0Áç¾Ü¼ùì”ÊAÓ£m¨x}ÁŒZ2žóÀ„¾N±Ö2
|
||||||
|
xå<‡IVüæ#W„ôúŠLÅÚ¿
|
Binary file not shown.
Binary file not shown.
|
@ -1,19 +1,29 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-rsa /AagBw
|
-> ssh-rsa /AagBw
|
||||||
iS8WPqPbBdSmudoh6Eip/jXqEpHZjzs8tROS+JcQoCQ1l10NUNGjTKNwk6n7MYLY
|
KzSLRxyFMN7W5Qt1uKkq6Kv83/tCQVf1DtjEbXak8DQhEfBH+CCQkVGqq4ainTxW
|
||||||
+KQyBwAHxdK9ka0bEk2mlB7fRDH5RidQIvSXgUZ89sttHOBbZYhfRybSLj0g/Nrv
|
0ND/rEUlcVRoPSO12Ba+4ghjk2SedqLdmmleaOpWv5+gQxeHl7LdRTeXoHhUiDvC
|
||||||
5hYTZFQnpBl7GzPnNV6IQerB/lsvDTaptzXHbzwkJuP9jPvHIl34DtVpuesAH/WN
|
QwDcajIcdRuccAemsoGh1hnpS1M5ONq3/rv7AcPVG/bGrdlp7+PPJtBF3uTXwU7/
|
||||||
X6thwS3XS6KfwcXFb0+xAC7TrAyigTEXTNPHUEC5Y2PhOBkMoc/5Hd41QoACmkzE
|
x6viuRvplN/eEAtvKG4ISoM8aUzccfeE0vi0RxXMW2HYJ5JDjN6vHTumHFmw+1tf
|
||||||
AT0h1cW5g2Zgi/N0lkf3EGQu8m0W2yT+YoXY7JIFUyG3K1Pp+y+vucvruqgcXTVg
|
EjDCf81Ddc4+ZF8lubHUzBc5/QmUsNS9cMEI3LOR6SmYhm4NYkqL3O+8YGVjBOdG
|
||||||
WqtwDDbjid1TbcBVr2Gt91y249++o/FBvV8IBMyP1QrABspf3WPy7C6/QKtnXtah
|
rzGXitzgz3AAJkA3ZvG3HFJ3zYTfeeRxEpiQdjZ8CXc3/f3VEZUCJGrNm7Pidr2f
|
||||||
OJreu+JqND/vsdc5xjJhVnU7NtcCawdyeKvZEX7Xs34hagJD7OJOaAibU/mS6Kr4
|
WBGQY1RSLnafxNH9TVQrXvAETEnrHUHVzgQpRUEg355u6SqC/oNuz+TOQWU/qeT1
|
||||||
r2xJCsfrlXnoMYo+LeY/LevZeNcfCe7WaiBJUi6sz8WXAUkiQ6AvJzWNvVr38+qK
|
Kuqowaigpi0QuSYiJP3rIWDUiVc+mwRR/xhL0taLTyb74RI1GnBIGNwLwUpv6ybf
|
||||||
1H9ltAFVjqM7DPj/20fkWTHqxVldnRv8yJifsZb3VrXDNK4HjOkIBAj01G3jiT5j
|
0VpnfbH4WWygGPDXmKFHZcAh9zFE/P9xdpHAfviVKsSO/aKECrJjgc4hQSeUezNK
|
||||||
Ps9883PZ9b+3WEDjldptFbPRCF+daYMR6jxtYWHjejd6IvDiPGDNg8GXAjf2BIBR
|
nIzRdtUT50zCEeAKVeAxV1j+L6sP4eW4KTfo3wfJWSTx3eJD9vEPB0HYLka908LA
|
||||||
D7b91YclgiIQ6QcfEoaQBqCamNfYHTnyud3nU8ZBNCE
|
+SmSsHJ6pI3ZGARZ5uAC71wX2O7DL2YcnlJkHYJBcjk
|
||||||
-> ssh-ed25519 /WmILg J6zdvQoBfhrEdqWc0fu4Btd/0BTxGvvZF4A3DUynaAE
|
-> ssh-rsa QHr3/A
|
||||||
FcTsenYm8S6xEtB+cxTScU3TFfJq0LcAIEsRnsu3nvA
|
p5a0cPmR0JE9jrtFgBUSTmi8DhY2Rw5frNvHA0qG6wXqR/7k1qdCMDHxET2pdfLp
|
||||||
-> ssh-ed25519 OYRzvQ SrbSyaa8A373WtB+a3bDkOt4/KzUPNHQvVEW9xaOSzc
|
FuEuW7OUFOwREv1Z313LwT5ARfsdNg+uQ/t+h9NmF+ws2uFUyqVqOz9px9pLzjNN
|
||||||
XpuBn9jXaUSSgyuUHKID6PI0wJsKF250qlMctpZGFt8
|
0qlwxpQg13AX6JQY7NNN4gIHfy4moV0e+iGLXz991XC2fwdTcKGMBeX1hmAnnH0j
|
||||||
--- 6RUGIhuMoK/WwDKg8jghy22j+CM6PDu6Vzp301Yh/Iw
|
Df4UetHRiCZVJSnMthmK+8dPsRZehzYNYQgm8D3E1fuUtbPXGNKYXQ3Bi8TgGB0i
|
||||||
#sàùÞÙL‰!$»ßãM[2êŸ×Ã0ÆøC…·¢‚,Ÿt†/$_·õ?œ™‹æl4xQ¡6úµ¶%¨Þ¡êsK¡Y;ªƒ]œZ³ÊUE°NŽ
|
1VOQsiWHoEdXnLkYCnBIl01BRp9BXfOKq31ow8w/CuA6wePhp3WrugqV27WGxMp2
|
||||||
|
C7SmnNf+nTmpz0L2nwgapM+NqfJUkru3jqE6FC3fvhBuJeB15cDSGdBNtk8AeKg1
|
||||||
|
tUMp875C3tsK72s4ivZAgZsgUzhhTZLioamCxkbvD3uDzvf1AEbbkXKBWFSPB+Hr
|
||||||
|
fmIz142EUBH7I/VJblC9EOusgi3CxPufriMqtyGz//HeTxJnUfLbO5wvNWUlDm2C
|
||||||
|
rkNMQPczurQ4mkxyTz6uCV80D5Z+Q9ABtyzMb8mUYwhMBVOY15nC7e8QNKU3Cnoq
|
||||||
|
gps4SRijnZgLNJ1WjS548K0WxxsasJR7gEpbdSwLy0+K/YHYwlyhmG7+LMVGSs02
|
||||||
|
mswg4Y+W+K6rOEeYXdPCSdy76V9OhDle7FFOrePHLCc
|
||||||
|
-> ssh-ed25519 /WmILg DXuUNsdlALUPr3ULUpoEQ5fRlhRkrnUcHTWAxdy7DCY
|
||||||
|
+StTEHWk8y+fU+TxXfmh/EoNovME9arXHMu1m1HLeQM
|
||||||
|
--- VTojICHlhNNmITiRWucloGuIArtXxIV9ttGrK2DROgw
|
||||||
|
PcëÌ!&|Ú)«Ò2Mˆ]Pä,§\0äÒ%%ÍOó»2AßÜr4e(VŽm»ž&Âሗ²`ºÛ\L¸ÊHnPß
gvp½çt5pÎT‚°
|
|
@ -1,19 +1,30 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-rsa /AagBw
|
-> ssh-rsa /AagBw
|
||||||
L/R/OsACkgoALVEEcBhvX+BR8f+zdbhiL0Mq8bSsctkSYfJXuO3jUGGH0SpL1bns
|
P3hgwGmP9M9uTVqkiAzFrqZqyMjafLFFHqHNqP4fsAdbmZmdWudSBnm8TRmSWUWY
|
||||||
ZRRtQM43ThirFxS8P0Z15HKyyUCbsOiQta4F26XvZqZ/+RWp+BivAwsGUzmiJZFs
|
1ONw8ncwtqTfu07ChWzv0RESTWmcOp5afysLCDE/Fz9dByI1iPLxixoAaiA6hncA
|
||||||
0gMaq1xrjP34IclWqDTEfhjrMi7Wh1Ccex7qYyfn5BAZAgccDMQ7rHCXC6Ou+L7y
|
irblHoiXdFVXvX57jTddYX0BMK8lup5EoIde6r1o+7L3/6VwAvM40yZekw6jsZn5
|
||||||
6JNOU/cYx6vMLX7Br9jxBZlg698SXcfvX3QymuV2kjrvkKeq6gVe9Ju5JeM+EiG2
|
ViA9ClsiEdvIKV5KVRA6oGBXoRHbvcWrMwGDCU55xSIdpjdoDi/YTQsqnfBMyQAg
|
||||||
bHTE6A8yHe/UZTHxeWMNUkw0JbcUunIBLM87xCE1BdmCfLkUXMRdAhc5axKCtSsG
|
i7FGclkHkpBUQI+8W6l2tqgwTJKQC/E+zVRI3VK+xJyHmpnXzZ4SEHStkB3PnCJu
|
||||||
/Qtsi6u2ucT+6V49+OLQ7KzrjJ1dqPjY7GgASswZCeg3K7IITO1nfTYywzjkLnYC
|
fGCg9ywap0dji9Cnvk4PH67c2u3gIlaFZayErVX9q0I6ytnHFcALSyDLFGRnfaHY
|
||||||
iWUze/IoIVlC2msur4ZVDk6ySJ85yUubIByuteAkFtynBFfeVNcuKBYvs3aO8k9A
|
OTpIZ3m9cYcMhpnFCZRvxul5x2OuPEWMiRKoVm++U4BmWTRc314HDo/ZBfl1DAe1
|
||||||
mBL10w+u3hVr1r6N1x98RDnZ5lsQ3Zi6TbaIQxzXfSi4ztv4QR68k3eiQ5X9Fr+m
|
XtvP7ITpT4YM/3rduqW1kVIpwAB2e/7EBpoJVvsGIBTkQ/jIB/MY3j5CC5JX82C0
|
||||||
yuJ36z6+MCIqiW43I8LU1a22KxYrSqrcvJCyHi6Mnyc5CIemb1tuR9WnnnE9i23z
|
rlF7oT6EsWqbNCIGmIvYGTlpmCOQT2KOLHNKkynBPSC1mPKkBpInSEtx1NHl/Sgl
|
||||||
DiPHYIYrPYl3UOetADkzWfRU+uAvypi/zvPB3nGZXwXwuuw3BD883OqDDD2jvnh7
|
NPua8EaV9lF0h0I3GZDXD1T0AQ7AUK8cP2whh2FS2qBlNqOJMfW8hg975gb0cTsH
|
||||||
+VAO291rzfi9sdfz2v1ezYpgSZZibDq1TqPQjyRgT40
|
IAOvLYeQtOz1YDNwTc3Ctz0+FCHQEJhIuB8aTMuP9SY
|
||||||
-> ssh-ed25519 /WmILg NAhEtnM2S0s9CiQNyIALXdkUqT7nuYJsWBrqK2x3dW0
|
-> ssh-rsa QHr3/A
|
||||||
Rt9IHMYyHG9dV60LXhi/j4hnIU/V0w39PlBcpJaWZz4
|
cxnlH/KtwnL/4TDqg5YQfaBRCSBYpiywl7Hc4r8tbArIgcU9AYhNRzbT4LtLWA8e
|
||||||
-> ssh-ed25519 OYRzvQ mERn1AOi2HnJjqYi3tzshh8PxL7JPPdxwj0PvOkHel4
|
G4DVpE6fis0cw8ubowePCupAxnKLE7cIXydbOJ1w0aukjjmeHNpw23E7F9Flv7ye
|
||||||
Fb3wrYfVVAucaZRqnzJnnzc3SpiaXY79KFGt7CXLjic
|
4q7pHE+NL1jQMDf7u377IsC57KDimJufjWXvLjPVdX4eyaH07715s3bU0jgADRS7
|
||||||
--- SbN8GRT0Ej22hlS3Oh/nOe3SM/Bcik1FQGGMruI53s8
|
ViV+ccxBPUCkPB9Pdg5GxPOmkduczCZJ8xQhixrnXzA7CgnN9n4uPyihN1GdTbvv
|
||||||
ß/»¡C„Σ]œ¾þ<C2BE>ŶqM[É„/g"„¨Að’é(9òhY¥àëaæñ$l…\ÓÜeö›++þBà¤L¦¥RÊŠw=ëQrþŠb
|
h/mbGuKjnXo7TQtw9MZRV7j9aQadtpnhYQhIrcV9MEnwCFRD8wFzIcAxUb8qCu/f
|
||||||
|
Cmr2ny1imn5PXySDIxMUEEvCF5w2jhqAaJR8AVkJ12LcZ3FhowUwJnVkB2yalnUT
|
||||||
|
wDlJ7W8ZBZb2PITDiuY4pzdp3ibK+wmhueNd+rr86n0zVe097+wYbewKZ1/yF3Al
|
||||||
|
cDESeaxhU5GbEkSwYSn2W2ofpAX4A/5YnnhnbMlVMH6IvNfJxYhEfGg7vEfdFr40
|
||||||
|
yN67cyZY7/QoVmRmd/xhadmA41Z2oOWtcgcms9ALf6hhehO6GYW+mKj+Z4xEMDp0
|
||||||
|
P6ntUyuBRbdUez9k9Tbm6NB6aZdXi138JIXKQ2mXhPJbx9B3fN8dOIL6ofyZ3C7l
|
||||||
|
FAOQ+TQlu344RgcrJX4w2bRRQJKLM0wXRXWueEXHwlc
|
||||||
|
-> ssh-ed25519 /WmILg cyT3XEAti9DCnVgmK3TIxKaPnZeBtlyEFxqJsvuwimI
|
||||||
|
318xaKk5hK7UoinPt+aVGSIOwPzQHEaLxG/87HIEKTs
|
||||||
|
--- oZydNo3QihjYRb1k+MuiGKckbC+qBqIR8yTOYP0Fgd4
|
||||||
|
š¹Ts^pÛ)‚’AE’ô·±<C2B7>ÿ»|æ‰Q<E280B0>CþÝò}¬Îðv•‰¥
|
||||||
|
˜xÈìÍu¹ÆmΦ™1¿ù©ŸfÕ+¥„ŒñÂxOV®ÏX®à_
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue