Compare commits

...

169 commits

Author SHA1 Message Date
Bruno BELANYI 314cd4956b WIP: Bazel template
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-05 13:53:52 +00:00
Bruno BELANYI 8f120e2129 nixos: services: lohr: fix SSH key creation
All checks were successful
ci/woodpecker/push/check Pipeline was successful
In the migration to `tmpfiles.d(5)`, I used the wrong type of file.

Using `f` would write the path to the file as its content, rather than
copy it. Unfortunately `C` and `C+` do not overwrite an existing file,
so using a symlink it the correct solution here.

This means the SSH key file must have `lohr` as an owner... Perhaps I
should make it so the service can read the file itself, rather than
rely on the filesystem location, so that I don't have to contort myself
quite so much to make it work.
2024-04-02 12:25:34 +02:00
Bruno BELANYI f729f6a098 hosts: nixos: porthos: secrets: add 'lohr' owner 2024-04-02 12:25:05 +02:00
Bruno BELANYI 8a4fdf6a56 templates: fix description typo
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-01 22:27:06 +01:00
Bruno BELANYI d97da124ee templates: fix homepage links 2024-04-01 22:27:06 +01:00
Bruno BELANYI 96aa934bec pkgs: zsh-done: fix homepage link 2024-04-01 22:27:06 +01:00
Bruno BELANYI 4b5a19a8fa templates: fix deprecated CI syntax
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-01 22:26:21 +01:00
Bruno BELANYI 06c64c1a78 templates: fix 'matrix-notifier' CI step 2024-04-01 22:25:37 +01:00
Bruno BELANYI 15d0e6bb38 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-28 11:19:33 +00:00
Bruno BELANYI 607aa5351c nixos: services: tandoor-recipes: fix bulk upload
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-22 22:03:53 +01:00
Bruno BELANYI 61fa35093c nixos: services: mealie: fix bulk upload 2024-03-22 22:03:53 +01:00
Bruno BELANYI 4a01a50532 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
And fix the update `pinentry` options in home-manager.
2024-03-16 19:49:00 +01:00
Bruno BELANYI 41e1ad3265 overlays: remove 'gruvbox-nvim-better-diff'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Now that I have the explicit override for it, this overlay is not
necessary.

This reverts commit 9e0930aca4.
This reverts commit 28187c3b8f.
2024-03-14 10:58:09 +00:00
Bruno BELANYI 10b4e6ce2d home: vim: explicitly revert diff highlighting 2024-03-14 10:56:08 +00:00
Bruno BELANYI c0ef5c9275 overlays: add gruvbox-nvin-expose-palette 2024-03-14 10:49:39 +00:00
Bruno BELANYI 0ff8366105 home: vim: fix path high-lighting
All checks were successful
ci/woodpecker/push/check Pipeline was successful
It was previously linked to `Underlined`, which just looks plain wrong
IMO.

This links it back to `GruvboxOrange`, as it used to be.
2024-03-13 13:08:57 +00:00
Bruno BELANYI d365aba3c0 home: vim: lua: utils: remove 'dump'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
It's now available as 'vim.print'.
2024-03-12 15:13:20 +00:00
Bruno BELANYI b16b6a534b home: vim: lua: lsp: use 'vim.print' 2024-03-12 15:11:11 +00:00
Bruno BELANYI 070df03b7e home: vim: lua: utils: allow querying all clients
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-12 12:42:21 +00:00
Bruno BELANYI 0108b06a02 home: vim: lualine: use explicit buffer number
I want to tighten the API of this function a little bit, so let's be
more specific.
2024-03-12 12:40:49 +00:00
Bruno BELANYI 56e158f5c5 home: vim: lua: utils: fix deprecated function 2024-03-12 12:40:26 +00:00
Bruno BELANYI 4a8981c7b4 home: vim: lua: utils: fix documentation 2024-03-12 12:38:38 +00:00
Bruno BELANYI 07eca729f5 home: vim: null-ls: fix 'nixpkgs-fmt' condition
All checks were successful
ci/woodpecker/push/check Pipeline was successful
I haven't configured `nil` to format anything.

And I don't really care to, this is good enough for me.
2024-03-12 11:31:20 +00:00
Bruno BELANYI b24d299f70 home: xdg: move 'gdb' variables to their module
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-12 10:16:45 +00:00
Bruno BELANYI f06e99d95b home: xdg: move 'less' variables to their module 2024-03-12 10:16:45 +00:00
Bruno BELANYI 3fb758028c home: vim: lspconfig: remove 'rnix-lsp'
It's been abandoned, `nil` is a better language server nowadays.
2024-03-12 10:16:45 +00:00
Bruno BELANYI 276cc7e5f2 home: xdg: add '_JAVA_OPTIONS' 2024-03-11 17:32:54 +01:00
Bruno BELANYI b2dc051e6a flake: bump inputs
And fix the breaking changes in Vikunja (which actually make my
configuration simpler).
2024-03-11 17:32:54 +01:00
Bruno BELANYI 9749f0aa28 overlays: remove none-ls-shellcheck-nvim 2024-03-11 17:32:54 +01:00
Bruno BELANYI dc27b59912 home: vim: lspconfig: migrate to 'bashls'
Since `none-ls` has removed their `shellcheck` built-in. This actually
makes the diagnostics more robust to POSIX/non-POSIX scripts (the LSP
server detects it at runtime, which is more robust than the `ftdetect`
scripts).

Nice bonus: the shellcheck code is shown in the diagnostics message
without any configuration!

I'm not sure if I can configure `avoid-nullary-conditions` -- though it
seems like this check is broken at the moment (I couldn't get it to
trigger during my tests).
2024-03-11 17:32:54 +01:00
Bruno BELANYI 7a3e64f814 home: vim: lspconfig: add 'hls'
If I ever end up actually learning it...
2024-03-11 17:32:54 +01:00
Bruno BELANYI f13a6fb023 home: vim: lspconfig: add 'ruff-lsp'
Since everybody is moving towards using it instead of other linters...
2024-03-11 17:32:54 +01:00
Bruno BELANYI 30247ce3a0 home: vim: null-ls: fix deprecated builtins
`none-ls` deprecated a lot of unmaintained builtins, or ones that they
find has been replaced by a compete LSP server.

This removes those deprecated builtins, or uses a shim until I migrate
to the relevant LSP configuration (for `bash-language-server`).
2024-03-11 17:32:54 +01:00
Bruno BELANYI 08f4175412 overlays: add none-ls-shellcheck-nvim 2024-03-11 17:32:54 +01:00
Bruno BELANYI 6140e1c8f9 nixos: services: lohr: migrate to tmpfiles
This is better than a custom script.
2024-03-11 17:32:54 +01:00
Bruno BELANYI 5d3160fb0d hosts: nixos: porthos: migrate to new host
OVH/Kimsufi are deprecating my current server by the end of the year. So
let's migrate to a new host.

This was more painful than initially planned, OVH introduced a change to
their rescue system which messes with the NixOS installation [1].

In the end I used a kexec image [2] to run the installation.

[1]: https://github.com/NixOS/nix/issues/7790
[2]: https://github.com/nix-community/nixos-images
2024-03-11 17:32:54 +01:00
Bruno BELANYI 0f33dbd5c2 hosts: nixos: porthos: switch to forgejo
This required a quick rename to migrate from one to the other.
2024-03-11 17:32:54 +01:00
Bruno BELANYI f3207468f9 nixos: services: woodpecker: configurable forge 2024-03-11 17:32:54 +01:00
Bruno BELANYI b41fd9e48e hosts: nixos: porthos: secrets: add forgejo mail 2024-03-11 17:32:54 +01:00
Bruno BELANYI c1ffe09631 nixos: services: add forgejo 2024-03-11 17:32:54 +01:00
Bruno BELANYI 8591fb8b35 home: tmux: expand history limit 2024-03-11 16:03:53 +00:00
Bruno BELANYI 22139bd69f home: tmux: add hyperlinks support
Somewhat unfortunate that those have to be enabled by force, but easy
enough to support.
2024-03-11 16:03:53 +00:00
Bruno BELANYI 742b4c39a2 home: tmux: migrate to 'terminalFeatures'
There are other terminal capabilities I want to override in tmux, so
let's make this type more extensible.
2024-03-11 16:03:53 +00:00
Bruno BELANYI 97cc08d199 flake: use explicit 'systems' input 2024-03-11 16:03:53 +00:00
Bruno BELANYI a4e742bf55 nixos: services: blog: fix catch-all redirection
Don't use a hard-coded address...
2024-03-11 16:03:53 +00:00
Bruno BELANYI 84fea2f677 pkgs: add bt-migrate 2024-03-07 11:36:18 +00:00
Bruno BELANYI ef882a5267 pkgs: add sqlite_orm 2024-03-05 21:17:04 +00:00
Bruno BELANYI 6a47703c08 pkgs: add digestpp 2024-03-05 21:17:04 +00:00
Bruno BELANYI d423a03663 nixos: services: gitea: fix mail 'FROM' address
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-05 14:20:57 +00:00
Bruno BELANYI 40d1b39837 nixos: services: gitea: update mail configuration
Some checks failed
ci/woodpecker/push/check Pipeline failed
2024-03-05 14:17:30 +00:00
Bruno BELANYI ed15e62e1d nixos: services: gitea: use 'git' group
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-03-05 12:53:32 +00:00
Bruno BELANYI 6bef924513 overlays: remove gruvbox-nvim-treesitter-fix
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Not needed anymore.

This reverts commit d6eceea08a.
2024-03-05 12:43:22 +00:00
Bruno BELANYI 7f0a889ccd hosts: nixos: porthos: services: enable mealie 2024-03-05 12:43:22 +00:00
Bruno BELANYI 380933e69b hosts: nixos: porthos: secrets: add mealie mail 2024-03-05 12:43:22 +00:00
Bruno BELANYI a3afafd9e0 nixos: services: add mealie 2024-03-05 12:43:22 +00:00
Bruno BELANYI 4d25609b26 nixos: system: nix: expand trusted users 2024-03-05 12:43:22 +00:00
Bruno BELANYI 56c0c28b02 hosts: nixos: porthos: home: disable cache
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Same reason as the system-wide configuration...
2024-03-01 17:20:47 +00:00
Bruno BELANYI b9b47fffd6 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Fix the pyLoad user/group option that I added upstream [1].

Fix an evaluation error due to Pipewire changes [2].

[1]: https://github.com/NixOS/nixpkgs/pull/287304
[2]: https://github.com/NixOS/nixpkgs/pull/282377
2024-02-29 12:20:53 +00:00
Bruno BELANYI f9cdff8c13 hosts: homes: bazin: ignore interactive adb shells
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-23 13:28:48 +00:00
Bruno BELANYI eb668525f8 home: zsh: ignore more commands for notification 2024-02-23 13:14:09 +00:00
Bruno BELANYI 6539471186 templates: use explicit 'pre-commit check' CI step
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-16 23:00:57 +00:00
Bruno BELANYI 5d38d94da6 templates: use 'backend' CI label 2024-02-16 22:59:59 +00:00
Bruno BELANYI 7e361aff9d templates: c++-cmake: fix formatting
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-16 22:44:24 +00:00
Bruno BELANYI c5e5bee206 home: git: enable 'rerere'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
How did I not already have it enabled?
2024-02-16 19:05:02 +00:00
Bruno BELANYI b2a199c9a0 home: nix: fix cache configuration
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Copy-paste is bad kids, the home-manager module does *not* do the same
as NixOS.

I was rebuilding the world, since this was overriding the official Hydra
cache...
2024-02-15 17:09:56 +00:00
Bruno BELANYI a0dde6f274 home: zsh: add notification exclusion list
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-15 16:33:46 +00:00
Bruno BELANYI 3c79a373e4 pkgs: zsh-done: 0.1.0 -> 0.1.1 2024-02-15 16:33:46 +00:00
Bruno BELANYI 08f31c088b home: atuin: explicitly set 'enter_accept'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-13 14:34:27 +00:00
Bruno BELANYI 8b07ff5bbe homes: bazin: enable zsh notifications
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-13 11:35:28 +00:00
Bruno BELANYI d6c2948135 home: zsh: add 'zsh-done' 2024-02-13 11:32:44 +00:00
Bruno BELANYI c89dec2a38 home: zsh: enforce order of 'initExtra{First,}'
In case I want to add more values to those options, I still want the
_main_ values to be ordered before/after.
2024-02-12 20:59:52 +00:00
Bruno BELANYI 521522e4e9 home: zsh: use 'mkMerge'
This will make adding modular configuration easier.
2024-02-12 20:59:52 +00:00
Bruno BELANYI c9969775da nixos: services: backup: add essential files
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-12 14:21:17 +00:00
Bruno BELANYI 0bb2be6b87 home: nix: add 'cache.selfHosted'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Once again mirroring the NixOS module changes that I forgot to port
over.
2024-02-12 11:40:28 +00:00
Bruno BELANYI 7f17069998 home: nix: rename 'inputs' options
This mirrors the changes made to the NixOS module.
2024-02-12 11:40:28 +00:00
Bruno BELANYI 5e3bc5a8c9 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-11 12:38:30 +01:00
Bruno BELANYI b0aee235cd home: xdg: add 'GRADLE_USER_HOME'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-11 11:26:05 +00:00
Bruno BELANYI 9d9dba2cc2 home: add wget
This is mostly so that I can add the XDG-compliant configuration.
2024-02-11 11:26:05 +00:00
Bruno BELANYI cb97b0dbde home: xdg: add python configuration
It looks like 3.13 finally brought a way to change the history location
through `PYTHON_HISTORY`.
2024-02-11 11:26:05 +00:00
Bruno BELANYI f4c4a485d6 home: xdg: fix sort order 2024-02-11 11:26:05 +00:00
Bruno BELANYI d6eceea08a overlays: add gruvbox-nvim-treesitter-fix
The version in nixpkgs is not up-to-date with regards to the
nvim-treesitter breaking changes that were recently introduced.
2024-02-11 11:26:05 +00:00
Bruno BELANYI 9e0930aca4 overlays: gruvbox-nvim-better-diff: simplify 2024-02-11 11:26:05 +00:00
Bruno BELANYI 8c03bff1cf overlays: remove 'tandoor-recipes-failing-test'
This is now redundant, the nixpkgs bump provided an updated package
which builds successfully.

This reverts commit 473be47b29.
2024-02-11 11:26:05 +00:00
Bruno BELANYI 0b74332e9c flake: bump inputs 2024-02-11 11:26:05 +00:00
Bruno BELANYI a5aaf57e63 home: mail: accounts: remove himalaya backends
Their definition is redundant with the logic of the himalaya module,
which does the right thing by default.
2024-02-06 17:16:47 +01:00
Bruno BELANYI 7948dc284b nixos: hardware: rename 'trackball'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Since I do intend on configuring every trackball I own to use this
scheme, not just the MX Ergo.
2024-02-06 15:08:19 +00:00
Bruno BELANYI 183f3b48c8 hosts: nixos: aramis: hardware: enable graphics 2024-02-06 15:04:40 +00:00
Bruno BELANYI f54cee8f70 nixos: hardware: add graphics
I did not add an Nvidia knob to this module, as I do not foresee *ever*
using one of their graphics card.
2024-02-06 15:04:40 +00:00
Bruno BELANYI 5ecef0d789 hosts: nixos: porthos: services: enable pyload
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-02-04 14:56:59 +01:00
Bruno BELANYI df44786c9c hosts: nixos: porthos: secrets: add pyload creds 2024-02-04 14:56:59 +01:00
Bruno BELANYI 03dac604e9 nixos: services: add pyload 2024-02-04 14:56:59 +01:00
Bruno BELANYI b41f0890b8 flake: bump inputs 2024-02-04 00:01:10 +01:00
Bruno BELANYI 473be47b29 overlays: add 'tandoor-recipes-failing-test'
Since it's currently broken on the unstable channel, I am pre-emptively
fixing it so that I can bump my flake inputs.
2024-02-04 00:01:10 +01:00
Bruno BELANYI 05cf04a11f home: mpv: add mpv-cheatsheet
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-31 22:07:03 +00:00
Bruno BELANYI e227ad76b2 hosts: nixos: aramis: home: use 'pinentry-gtk2'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Now that it's available again, let's use it.

This reverts commit 39eba647ac.
2024-01-31 21:41:40 +00:00
Bruno BELANYI 3f13b3f03f flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-31 11:56:09 +00:00
Bruno BELANYI 16f98f144e hosts: nixos: porthos: secrets: add aria RPC token
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-30 15:51:48 +01:00
Bruno BELANYI cc029f7933 nixos: services: add aria 2024-01-30 15:51:48 +01:00
Bruno BELANYI 02412f2578 nixos: services: nextcloud: fix renamed option 2024-01-30 15:51:48 +01:00
Bruno BELANYI 1655afcedf flake: bump inputs 2024-01-30 15:51:48 +01:00
Bruno BELANYI e2ec4d3032 nixos: services: paperless: fix classifier hangs
This is an experimental fix to try and get around an issue with the
default BLAS/LAPACK implementation. See [1] for more details.

[1]: https://github.com/NixOS/nixpkgs/issues/240591
2024-01-30 15:51:48 +01:00
Bruno BELANYI 58b22b7354 home: firefox: tridactyl: remove 'Nitter' rule
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Turns out it's very annoying when the Nitter instance has been rate
limited.

This reverts commit e514389a3d.
2024-01-27 15:33:40 +00:00
Bruno BELANYI e2091e9e2e nixos: services: nextcloud: use HTTPS
All checks were successful
ci/woodpecker/push/check Pipeline was successful
This should fix my issue with the sliding sync server.
2024-01-26 23:36:05 +01:00
Bruno BELANYI 5cb67cf040 hosts: nixos: porthos: secrets: rekey secrets
Some of the secrets were using an invalid format due to (probably?)
being encrypted with a beta version of `age`.

I didn't need to rekey *all* the secrets, but I might as well
2024-01-26 23:27:58 +01:00
Bruno BELANYI b33938e825 nixos: services: paperless: rename settings option
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-22 16:57:18 +00:00
Bruno BELANYI 309c344a34 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-22 16:55:57 +00:00
Bruno BELANYI 13f20a28eb home: vim: add gn ftplugin 2024-01-22 16:55:57 +00:00
Bruno BELANYI dca6a9018b home: vim: ftdetect: add gn 2024-01-22 16:55:57 +00:00
Bruno BELANYI 629ec539c9 nixos: services: nextcloud: fix typo 2024-01-22 16:55:57 +00:00
Bruno BELANYI a5c57333cf hosts: homes: bazin: fix typo 2024-01-22 16:55:57 +00:00
Bruno BELANYI 136bd342ff nixos: services: matrix: fix deprecated option 2024-01-22 16:55:57 +00:00
Bruno BELANYI 10a3055136 nixos: services: nextcloud: fix deprecated option 2024-01-05 19:19:00 +01:00
Bruno BELANYI e4f8214cb2 modules: services: nextcloud: bump to 28 2024-01-05 19:19:00 +01:00
Bruno BELANYI b8b64bed8e home: vim: ftdetect: add glsl
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-05 10:59:58 +00:00
Bruno BELANYI 9546c00124 home: vim: ftdetect: fix obsolete comment 2024-01-05 10:59:45 +00:00
Bruno BELANYI bddcab110d pkgs: matrix-notifier: 0.3.0 -> 0.4.0
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-03 15:58:34 +00:00
Bruno BELANYI e02da7ec69 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-01-03 14:25:20 +00:00
Bruno BELANYI a93dc2935b flake: add explicit 'systems' input 2024-01-03 14:25:20 +00:00
Bruno BELANYI 39eba647ac hosts: nixos: aramis: home: use 'pinentry-qt'
The GTK2 variant has been removed [1].

I may revise this in the future if [2] is merged (I'd like to try
`pinentry-rofi` [3]).

[1]: https://github.com/NixOS/nixpkgs/pull/270266
[2]: https://github.com/NixOS/nixpkgs/pull/277221
[3]: https://github.com/plattfot/pinentry-rofi
2024-01-03 14:25:20 +00:00
Bruno BELANYI 932717b754 nixos: services: jellyfin: loosen umask
All checks were successful
ci/woodpecker/push/check Pipeline was successful
I just noticed that all the metadata files Jellyfin stores have very
restrictive ACLs.

The whole point of the `media` group is to make my HTPC eco-system work
together. In particular this should allow Sonarr and friends to delete
folders without manual intervention.
2023-12-26 15:17:05 +01:00
Bruno BELANYI 71ee178510 nixos: services: nginx: fix SSO subdomain
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-25 20:23:55 +01:00
Bruno BELANYI 6948424b81 nixos: services: remove redundant subdomains
See previous commit for the defaults.
2023-12-25 20:23:55 +01:00
Bruno BELANYI b7a4bc063f nixos: services: nginx: add default subdomain
In almost all cases, the subdomain should be the same as the attribute
name...
2023-12-25 20:23:55 +01:00
Bruno BELANYI faa87743e5 nixos: services: nginx: use attrset for vhosts
Attribute sets compose better than lists, it was a mistake to use a list
in the first place...
2023-12-25 20:23:55 +01:00
Bruno BELANYI 26950332c7 home: keyboard: extract from X module
All checks were successful
ci/woodpecker/push/check Pipeline was successful
This deserves to be its own standalone module, as I would want to use it
in both X and Wayland, etc...
2023-12-23 14:56:55 +01:00
Bruno BELANYI 13d85c30f9 pkgs: remove 'wifi-qr'
Some checks are pending
ci/woodpecker/push/check Pipeline is pending
Now that I added it to upstream, I can get rid of it.
2023-12-19 19:08:25 +01:00
Bruno BELANYI a657a7742e home: wm: i3bar: fix 'net' block when disconnected
Some checks are pending
ci/woodpecker/push/check Pipeline is pending
I still sometimes get the error message about not being able to format
the block, this should fix it.
2023-12-18 09:41:35 +00:00
Bruno BELANYI 066a33587d home: mpv: add uosc script
Some checks are pending
ci/woodpecker/push/check Pipeline is pending
2023-12-16 20:24:38 +00:00
Bruno BELANYI 864e0a5ae6 home: firefox: tridactyl: fix Google mapping
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-16 16:23:18 +00:00
Bruno BELANYI 4aca698ac6 pkgs: remove 'unified-hosts-lists'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Instead make use of the upstream packaged host list.
2023-12-16 14:31:16 +00:00
Bruno BELANYI 7ccb8ea8b5 pkgs: unbound-zones-adblock: use upstream package
All checks were successful
ci/woodpecker/push/check Pipeline was successful
This is a slight regression, as the current version of
`stevenblack-blocklist` is 3.13.10 and the version I packaged is
3.14.37.

However I am lazy and want to avoid having to bump the version
manually...
2023-12-16 14:28:46 +00:00
Bruno BELANYI 49f695bf68 pkgs: remove 'drone-scp'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
I added it to upstream nixpkgs.
2023-12-16 12:51:12 +00:00
Bruno BELANYI 49742deb18 pkgs: unified-hosts-lists: 3.12.15 -> 3.14.37
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-14 20:08:01 +00:00
Bruno BELANYI ad40c1b1d2 treewide: update to nix-direnv 3.0.0
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-14 14:26:18 +00:00
Bruno BELANYI c28959fe02 pkgs: remove 'vimix-cursors'
Now that I've (finally) packaged it upstream.
2023-12-14 14:26:18 +00:00
Bruno BELANYI 104bc05871 home: wm: use upstream 'vimix-cursors' 2023-12-14 14:26:18 +00:00
Bruno BELANYI 1d50844fa4 pkgs: remove 'ff2mpv-go'
I've (finally) packaged it upstream.
2023-12-14 14:26:18 +00:00
Bruno BELANYI e97f295470 home: firefox: use upstream 'ff2mpv-go' 2023-12-14 14:26:18 +00:00
Bruno BELANYI 373545ee38 nixos: system: printing: migrate deprecated option
It's recommended to only enable the IPv4 option, as most mDNS responders
only register IPv4 addresses (therefore enabling IPv6 would lead to long
timeouts when checking for those addresses first).
2023-12-14 14:26:18 +00:00
Bruno BELANYI 401972cb42 flake: bump inputs 2023-12-14 14:26:18 +00:00
Bruno BELANYI 90aed6b2ca pkgs: lohr: 0.4.2. -> 0.4.5 2023-12-14 14:26:18 +00:00
Bruno BELANYI 3a2f02f001 home: wm: i3bar: add VPN blocks 2023-12-14 14:25:48 +00:00
Bruno BELANYI 33b94a7f9d home: wm: i3bar: add 'flatten' call
This makes it easier to declare multiple blocks at once, as will be done
in the next commit.
2023-12-14 11:41:27 +00:00
Bruno BELANYI 1faa8d9acf nixos: services: wireguard: add 'simpleManagement'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
This makes it easier to manage the VPN services, as they don't require a
password prompt to be brought up/down.
2023-12-14 11:23:28 +00:00
Bruno BELANYI 9ddd59eac8 nixos: system: add polkit
One nice thing is that it enables the prompts when using `systemctl`,
instead of requiring `sudo`.
2023-12-14 11:23:28 +00:00
Bruno BELANYI f23e6251ce nixos: services: wireguard: add VPN conflicts
It's now easier to do the right thing when starting a VPN service,
whether the other one is running or not.
2023-12-14 11:23:28 +00:00
Bruno BELANYI 16fade92b4 home: packages: add 'allowAliases', 'allowUnfree'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
With [1], this should now be taken into account properly.

[1]: https://github.com/nix-community/home-manager/pull/4304
2023-12-08 11:50:44 +00:00
Bruno BELANYI 22fa05ca0c home: packages: refactor config format 2023-12-08 11:49:52 +00:00
Bruno BELANYI 3ed2fac3db flake: nixos: use module-provided 'lib'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
I can't use `self.lib` to define options, that would result in infinite
recursion.
2023-12-07 22:00:14 +00:00
Bruno BELANYI bdc3e63fff flake: home-manager: refactor 'hosts' -> 'homes'
This makes more sense as a name.
2023-12-07 20:30:35 +00:00
Bruno BELANYI 20ab679542 hosts: homes: bazin: migrate 'git.package'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-07 14:41:29 +00:00
Bruno BELANYI 3a7f4d126d hosts: homes: mousqueton: migrate 'git.package' 2023-12-07 14:40:15 +00:00
Bruno BELANYI afda437f49 home: git: allow overriding default package 2023-12-07 14:39:38 +00:00
Bruno BELANYI 792d997dc9 hosts: homes: bazin: disable 'mosh' package 2023-12-07 14:39:38 +00:00
Bruno BELANYI 0164d12087 home: ssh: move 'mosh' configuration 2023-12-07 14:39:38 +00:00
Bruno BELANYI 0b9c2309da home: ssh: use 'mkMerge'
This will make it easier to add new options (e.g: for `mosh`).
2023-12-07 14:39:38 +00:00
Bruno BELANYI 8398c4350a hosts: homes: add work laptop 2023-12-07 14:39:38 +00:00
Bruno BELANYI 093d7a3cb8 flake: bump inputs
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-12-06 22:19:03 +01:00
Bruno BELANYI e41bacc2fc home: wm: i3: make 'rofi-bluetooth' ignore case
All checks were successful
ci/woodpecker/push/check Pipeline was successful
The options given to the script are piped straight to `rofi -dmenu`,
which apparently needs the `-i` switch to be case insensitive.
2023-12-04 13:44:06 +00:00
Bruno BELANYI 55362b1db8 home: vim: add remove deprecated option
All checks were successful
ci/woodpecker/push/check Pipeline was successful
The plug-in now configures itself automatically.

I could also set `vim.g.skip_ts_context_commentstring_module = true`,
but that should be removed soon enough anyway, and I would forget to
remove it...
2023-12-01 19:20:52 +00:00
Bruno BELANYI 2d532f35a9 flake: bump inputs 2023-12-01 19:20:52 +00:00
Bruno BELANYI 15ca07bc64 home: wm: i3bar: remove redundant buttons
Turns out they're not needed, or at least not anymore?
2023-12-01 19:20:52 +00:00
Bruno BELANYI f4cc63c711 home: direnv: remove 'ANDROID_SDK_HOME'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Turns out this is supposed to be used for configuration, and it makes
some tools error out due to a sanity check...

I'm not pleased about this, but whatever.
2023-11-29 10:56:16 +00:00
Bruno BELANYI ec79be2a45 home: xdg: set 'ANDROID_USER_HOME' 2023-11-29 10:56:16 +00:00
Bruno BELANYI 97f5bf504c hosts: homes: mousqueton: remove 'LD_PRELOAD'
It looks like this isn't needed anymore.
2023-11-29 10:56:16 +00:00
Bruno BELANYI 302cb907ef home: wm: i3: make blueman device manager floating
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2023-11-28 20:28:12 +00:00
Bruno BELANYI 3fb8734c56 home: direnv: fix 'use_android'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Don't rely on `ANDROID_SDK_HOME` if it hasn't yet been defined.
2023-11-27 11:18:29 +00:00
Bruno BELANYI b48d81451d nixos: services: migrate to 'ensureDBOwnership'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
`ensurePermissions` is deprecated, and doesn't work on PostgreSQL 15.
2023-11-21 00:22:44 +01:00
Bruno BELANYI 60d941b40b flake: bump inputs
My tandoor-recipes fix was merged upstream, so remove the overlay.

And because of the recent postgres bump for 23.11, `ensureDBOwnership`
is the new way of dealing with DB permissions [1]. This means I had to
fix manually migrate my `gitea` DB and make it match the DB user.

[1]: https://github.com/NixOS/nixpkgs/pull/266270
2023-11-21 00:20:28 +01:00
171 changed files with 2153 additions and 1104 deletions

8
.envrc
View file

@ -1,8 +1,8 @@
if ! has nix_direnv_version || ! nix_direnv_version 2.4.0; then if ! has nix_direnv_version || ! nix_direnv_version 3.0.0; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.4.0/direnvrc" "sha256-XQzUAvL6pysIJnRJyR7uVpmUSZfc7LSgWQwq/4mBr1U=" source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.0/direnvrc" "sha256-21TMnI2xWX7HkSTjFFri2UaohXVj854mgvWapWrxRXg="
fi fi
nix_direnv_watch_file ./flake/checks.nix watch_file ./flake/checks.nix
nix_direnv_watch_file ./flake/dev-shells.nix watch_file ./flake/dev-shells.nix
use flake use flake

View file

@ -9,15 +9,15 @@ steps:
- name: notifiy - name: notifiy
image: bash image: bash
secrets: environment:
- source: matrix_homeserver ADDRESS:
target: address from_secret: matrix_homeserver
- source: matrix_roomid ROOM:
target: room from_secret: matrix_roomid
- source: matrix_username USER:
target: user from_secret: matrix_username
- source: matrix_password PASS:
target: pass from_secret: matrix_password
commands: commands:
- nix run '.#matrix-notifier' - nix run '.#matrix-notifier'
when: when:

View file

@ -8,14 +8,17 @@
], ],
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
],
"systems": [
"systems"
] ]
}, },
"locked": { "locked": {
"lastModified": 1696775529, "lastModified": 1707830867,
"narHash": "sha256-TYlE4B0ktPtlJJF9IFxTWrEeq+XKG8Ny0gc2FGEAdj0=", "narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "daf42cb35b2dc614d1551e37f96406e4c4a2d3e4", "rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -33,11 +36,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1673295039, "lastModified": 1700795494,
"narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=", "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
"owner": "lnl7", "owner": "lnl7",
"repo": "nix-darwin", "repo": "nix-darwin",
"rev": "87b9d090ad39b25b2400029c64825fc2a8868943", "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -50,11 +53,11 @@
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1696426674,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra", "owner": "edolstra",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -70,11 +73,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1698579227, "lastModified": 1709336216,
"narHash": "sha256-KVWjFZky+gRuWennKsbo6cWyo7c/z/VgCte5pR9pEKg=", "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "f76e870d64779109e41370848074ac4eaa1606ec", "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -86,14 +89,16 @@
}, },
"futils": { "futils": {
"inputs": { "inputs": {
"systems": "systems" "systems": [
"systems"
]
}, },
"locked": { "locked": {
"lastModified": 1694529238, "lastModified": 1710146030,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -111,11 +116,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1660459072, "lastModified": 1709087332,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "gitignore.nix", "repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -131,11 +136,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1698670511, "lastModified": 1711604890,
"narHash": "sha256-jQIu3UhBMPHXzVkHQO1O2gg8SVo5lqAVoC6mOaLQcLQ=", "narHash": "sha256-vbI/gxRTq/gHW1Q8z6D/7JG/qGNl3JTimUDX+MwnC3A=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "8e5416b478e465985eec274bc3a018024435c106", "rev": "3142bdcc470e1e291e1fbe942fd69e06bd00c5df",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -147,11 +152,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1698611440, "lastModified": 1711523803,
"narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=", "narHash": "sha256-UKcYiHWHQynzj6CN/vTcix4yd1eCu1uFdsuarupdCQQ=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735", "rev": "2726f127c15a4cc9810843b96cad73c7eb39e443",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -163,11 +168,11 @@
}, },
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1698745553, "lastModified": 1711622043,
"narHash": "sha256-Fdip7ewCtZTjOu7ATDFUAy3OqrgcyvzDElLXhr4YmmI=", "narHash": "sha256-nCNcHYlmmPPIDRkDCvNoEog+AuG7jdmkhkU0fqoS82A=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "dfbf198236d40e9741db76936088f05107e19013", "rev": "b7ff69e152caedbe4d0e40173d61732ac139a09c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -192,11 +197,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1698227354, "lastModified": 1711519547,
"narHash": "sha256-Fi5H9jbaQLmLw9qBi/mkR33CoFjNbobo5xWdX4tKz1Q=", "narHash": "sha256-Q7YmSCUJmDl71fJv/zD9lrOCJ1/SE/okZ2DsrmRjzhY=",
"owner": "cachix", "owner": "cachix",
"repo": "pre-commit-hooks.nix", "repo": "pre-commit-hooks.nix",
"rev": "bd38df3d508dfcdff52cd243d297f218ed2257bf", "rev": "7d47a32e5cd1ea481fab33c516356ce27c8cef4a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -214,7 +219,8 @@
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nur": "nur", "nur": "nur",
"pre-commit-hooks": "pre-commit-hooks" "pre-commit-hooks": "pre-commit-hooks",
"systems": "systems"
} }
}, },
"systems": { "systems": {
@ -228,6 +234,7 @@
}, },
"original": { "original": {
"owner": "nix-systems", "owner": "nix-systems",
"ref": "main",
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }

View file

@ -9,6 +9,7 @@
inputs = { inputs = {
home-manager.follows = "home-manager"; home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs"; nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
}; };
}; };
@ -27,6 +28,9 @@
owner = "numtide"; owner = "numtide";
repo = "flake-utils"; repo = "flake-utils";
ref = "main"; ref = "main";
inputs = {
systems.follows = "systems";
};
}; };
home-manager = { home-manager = {
@ -64,6 +68,13 @@
nixpkgs-stable.follows = "nixpkgs"; nixpkgs-stable.follows = "nixpkgs";
}; };
}; };
systems = {
type = "github";
owner = "nix-systems";
repo = "default";
ref = "main";
};
}; };
# Can't eta-reduce a flake outputs... # Can't eta-reduce a flake outputs...

View file

@ -1,9 +1,9 @@
{ flake-parts { flake-parts
, futils , systems
, ... , ...
} @ inputs: } @ inputs:
let let
mySystems = futils.lib.defaultSystems; mySystems = import systems;
in in
flake-parts.lib.mkFlake { inherit inputs; } { flake-parts.lib.mkFlake { inherit inputs; } {
systems = mySystems; systems = mySystems;

View file

@ -39,7 +39,8 @@ let
}; };
}; };
hosts = { homes = {
"ambroisie@bazin" = "x86_64-linux";
"ambroisie@mousqueton" = "x86_64-linux"; "ambroisie@mousqueton" = "x86_64-linux";
}; };
in in
@ -49,13 +50,13 @@ in
legacyPackages = { legacyPackages = {
homeConfigurations = homeConfigurations =
let let
filteredHosts = lib.filterAttrs (_: v: v == system) hosts; filteredHomes = lib.filterAttrs (_: v: v == system) homes;
allHosts = filteredHosts // { allHomes = filteredHomes // {
# Default configuration # Default configuration
ambroisie = system; ambroisie = system;
}; };
in in
lib.mapAttrs mkHome allHosts; lib.mapAttrs mkHome allHomes;
}; };
}; };
} }

View file

@ -1,7 +1,5 @@
{ self, inputs, ... }: { self, inputs, lib, ... }:
let let
inherit (self) lib;
defaultModules = [ defaultModules = [
{ {
# Let 'nixos-version --json' know about the Git revision # Let 'nixos-version --json' know about the Git revision
@ -23,7 +21,7 @@ let
]; ];
specialArgs = { specialArgs = {
# Use my extended lib in NixOS configuration # Use my extended lib in NixOS configuration
inherit lib; inherit (self) lib;
# Inject inputs to use them in global registry # Inject inputs to use them in global registry
inherit inputs; inherit inputs;
}; };

View file

@ -0,0 +1,43 @@
# Google Laptop configuration
{ lib, options, pkgs, ... }:
{
services.gpg-agent.enable = lib.mkForce false;
my.home = {
git = {
package = pkgs.emptyDirectory;
};
tmux = {
# I use scripts that use the passthrough sequence often on this host
enablePassthrough = true;
terminalFeatures = {
# HTerm uses `xterm-256color` as its `$TERM`, so use that here
xterm-256color = { };
};
};
ssh = {
mosh = {
package = pkgs.emptyDirectory;
};
};
zsh = {
notify = {
enable = true;
exclude = options.my.home.zsh.notify.exclude.default ++ [
"adb shell$" # Only interactive shell sessions
];
ssh = {
enable = true;
# `notify-send` is proxied to the ChromeOS layer
useOsc777 = false;
};
};
};
};
}

View file

@ -4,26 +4,21 @@
# Google specific configuration # Google specific configuration
home.homeDirectory = "/usr/local/google/home/ambroisie"; home.homeDirectory = "/usr/local/google/home/ambroisie";
# Some tooling (e.g: SSH) need to use this library
home.sessionVariables = {
LD_PRELOAD = "/usr/grte/v5/lib64/libnss_cache.so.2\${LD_PRELOAD:+:}$LD_PRELOAD";
};
systemd.user.sessionVariables = {
LD_PRELOAD = "/usr/grte/v5/lib64/libnss_cache.so.2\${LD_PRELOAD:+:}$LD_PRELOAD";
};
programs.git.package = lib.mkForce pkgs.emptyDirectory;
services.gpg-agent.enable = lib.mkForce false; services.gpg-agent.enable = lib.mkForce false;
my.home = { my.home = {
git = {
package = pkgs.emptyDirectory;
};
tmux = { tmux = {
# I use scripts that use the passthrough sequence often on this host # I use scripts that use the passthrough sequence often on this host
enablePassthrough = true; enablePassthrough = true;
# HTerm uses `xterm-256color` as its `$TERM`, so use that here terminalFeatures = {
trueColorTerminals = [ "xterm-256color" ]; # HTerm uses `xterm-256color` as its `$TERM`, so use that here
xterm-256color = { };
};
}; };
}; };
} }

View file

@ -26,6 +26,12 @@
firmware = { firmware = {
cpuFlavor = "intel"; cpuFlavor = "intel";
}; };
graphics = {
enable = true;
gpuFlavor = "intel";
};
}; };
hardware = { hardware = {

View file

@ -2,7 +2,7 @@
{ {
my.home = { my.home = {
# Use graphical pinentry # Use graphical pinentry
bitwarden.pinentry = "gtk2"; bitwarden.pinentry = pkgs.pinentry-gtk2;
# Ebook library # Ebook library
calibre.enable = true; calibre.enable = true;
# Some amount of social life # Some amount of social life
@ -14,7 +14,7 @@
# Blue light filter # Blue light filter
gammastep.enable = true; gammastep.enable = true;
# Use a small popup to enter passwords # Use a small popup to enter passwords
gpg.pinentry = "gtk2"; gpg.pinentry = pkgs.pinentry-gtk2;
# Machine specific packages # Machine specific packages
packages.additionalPackages = with pkgs; [ packages.additionalPackages = with pkgs; [
element-desktop # Matrix client element-desktop # Matrix client

View file

@ -3,15 +3,14 @@
{ {
boot = { boot = {
# Use the GRUB 2 boot loader. # Use the systemd-boot EFI boot loader.
loader.grub = { loader = {
enable = true; systemd-boot.enable = true;
# Define on which hard drive you want to install Grub. efi.canTouchEfiVariables = true;
device = "/dev/disk/by-id/ata-HGST_HUS724020ALA640_PN2181P6J58M1P";
}; };
initrd = { initrd = {
availableKernelModules = [ "uhci_hcd" "ahci" "usbhid" ]; availableKernelModules = [ "ahci" "xhci_pci" "ehci_pci" "usbhid" "sd_mod" ];
kernelModules = [ "dm-snapshot" ]; kernelModules = [ "dm-snapshot" ];
}; };

View file

@ -16,11 +16,5 @@
# Set your time zone. # Set your time zone.
time.timeZone = "Europe/Paris"; time.timeZone = "Europe/Paris";
# This value determines the NixOS release from which the default system.stateVersion = "24.05"; # Did you read the comment?
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "20.09"; # Did you read the comment?
} }

View file

@ -1,5 +1,5 @@
# Hardware configuration # Hardware configuration
{ lib, modulesPath, ... }: { modulesPath, ... }:
{ {
imports = [ imports = [
@ -11,9 +11,18 @@
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = {
device = "/dev/disk/by-label/boot";
fsType = "vfat";
};
swapDevices = [ swapDevices = [
{ device = "/dev/disk/by-label/swap"; } { device = "/dev/disk/by-label/swap"; }
]; ];
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; my.hardware = {
firmware = {
cpuFlavor = "intel";
};
};
} }

View file

@ -1,11 +1,18 @@
{ ... }: { ... }:
{ {
my.home = { my.home = {
# Allow using 24bit color when SSH-ing from various clients nix = {
tmux.trueColorTerminals = [ cache = {
# This server is the one serving the cache, don't try to query it
selfHosted = false;
};
};
# Allow using extended features when SSH-ing from various clients
tmux.terminalFeatures = {
# My usual terminal, e.g: on laptop # My usual terminal, e.g: on laptop
"alacritty" alacritty = { };
]; };
# Always start a tmux session when opening a shell session # Always start a tmux session when opening a shell session
zsh.launchTmux = true; zsh.launchTmux = true;

View file

@ -3,7 +3,7 @@
SWAP_SIZE=16GiB SWAP_SIZE=16GiB
parted /dev/sda --script -- \ parted /dev/sda --script -- \
mklabel msdos \ mklabel gpt \
mkpart primary 512MiB -$SWAP_SIZE \ mkpart primary 512MiB -$SWAP_SIZE \
mkpart primary linux-swap -$SWAP_SIZE 100% \ mkpart primary linux-swap -$SWAP_SIZE 100% \
mkpart ESP fat32 1MiB 512MiB \ mkpart ESP fat32 1MiB 512MiB \
@ -11,14 +11,24 @@ parted /dev/sda --script -- \
parted /dev/sdb --script -- \ parted /dev/sdb --script -- \
mklabel gpt \ mklabel gpt \
mkpart primary 0MiB 100% mkpart primary 0% 100%
parted /dev/sdc --script -- \
mklabel gpt \
mkpart primary 0% 100%
parted /dev/sdd --script -- \
mklabel gpt \
mkpart primary 0% 100%
mkfs.ext4 -L media1 /dev/sda1 mkfs.ext4 -L media1 /dev/sda1
mkfs.ext4 -L media2 /dev/sdb1 mkfs.ext4 -L media2 /dev/sdb1
mkfs.ext4 -L media3 /dev/sdc1
mkfs.ext4 -L media4 /dev/sdd1
pvcreate /dev/sda1 pvcreate /dev/sda1
pvcreate /dev/sdb1 pvcreate /dev/sdb1
vgcreate lvm /dev/sda1 /dev/sdb1 pvcreate /dev/sdc1
pvcreate /dev/sdd1
vgcreate lvm /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
lvcreate -l 100%FREE -n media lvm lvcreate -l 100%FREE -n media lvm
mkfs.ext4 -L nixos /dev/mapper/lvm-media mkfs.ext4 -L nixos /dev/mapper/lvm-media
@ -27,17 +37,17 @@ mkfs.fat -F 32 -n boot /dev/sda3
mount /dev/disk/by-label/nixos /mnt mount /dev/disk/by-label/nixos /mnt
swapon /dev/sda2 swapon /dev/sda2
mkdir -p /mnt/boot
mount /dev/disk/by-label/boot /mnt/boot
apt install sudo apt install sudo
useradd -m -G sudo setupuser useradd -m -G sudo setupuser
# shellcheck disable=2117
su setupuser
cat << EOF cat << EOF
# Run the following commands as setup user # Run the following commands as setup user
curl -L https://nixos.org/nix/install | sh curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
. $HOME/.nix-profile/etc/profile.d/nix.sh . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
nix-channel --add https://nixos.org/channels/nixos-20.09 nixpkgs nix profile install nixpkgs#nixos-install-tools
sudo "$(which nixos-generate-config)" --root /mnt sudo "$(which nixos-generate-config)" --root /mnt
# Change uuids to labels # Change uuids to labels
@ -54,3 +64,6 @@ git crypt unlock
nixos-install --root /mnt --flake '.#<hostname>' nixos-install --root /mnt --flake '.#<hostname>'
EOF EOF
# shellcheck disable=2117
su setupuser

View file

@ -6,30 +6,17 @@
hostName = "porthos"; # Define your hostname. hostName = "porthos"; # Define your hostname.
domain = "belanyi.fr"; # Define your domain. domain = "belanyi.fr"; # Define your domain.
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# The global useDHCP flag is deprecated, therefore explicitly set to false here. # (the default) this is the recommended approach. When using systemd-networkd it's
# Per-interface useDHCP will be mandatory in the future, so this generated config # still possible to use this option, but it's recommended to use it in conjunction
# replicates the default behaviour. # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
useDHCP = false; useDHCP = true;
interfaces = { interfaces = {
bond0.useDHCP = true; eno1.useDHCP = true;
bonding_masters.useDHCP = true; eno2.useDHCP = true;
dummy0.useDHCP = true;
erspan0.useDHCP = true;
eth0.useDHCP = true;
eth1.useDHCP = true;
gre0.useDHCP = true;
gretap0.useDHCP = true;
ifb0.useDHCP = true;
ifb1.useDHCP = true;
ip6tnl0.useDHCP = true;
sit0.useDHCP = true;
teql0.useDHCP = true;
tunl0.useDHCP = true;
}; };
}; };
# Which interface is used to connect to the internet # Which interface is used to connect to the internet
my.hardware.networking.externalInterface = "eth0"; my.hardware.networking.externalInterface = "eno1";
} }

View file

@ -1,10 +1,8 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg 0bz3W8QcGaulxy+kDmM717jTthQpFOCwV9HkenFJEyo -> ssh-ed25519 cKojmg bQFr9oAnbo1rI/MpUV8wQz/Xj7iZY4ZU+Swf0nSIQFw
NKeh1/JkX4WAWbOjUeKLMbsyCevnDf3a70FfYUav26c zama2XJ0gdvUlD2GHMhmZqHSxHe+dKSfXnHoWDcSw7Y
-> ssh-ed25519 jPowng Q59ybJMMteOSB6hZ5m6UPP0N2p8jrDSu5vBYwPgGcRw -> ssh-ed25519 jPowng gitUwSKTNKWLSxnwa185O7x/u0ul93g8wPESdZaKRk8
j420on2jSsfMsv4MDtiOTMIFjaXV7sIsrS+g4iab+68 uvBIfAUkZp5sg6rfeEGvL5ZDV8m2uSEotW02kjPN3Hw
-> z}.q-grease s2W<qM_Z t --- SZxe5f/CUZBvPQa2Sz/UBY3L68rMkIGGRuZPk7YE+Vg
n1Yfs/gmNsl/n9HtuKBIIT8iwIjYca2yxlh7Q1XAT1B+RZ8oGjW8yCPj1unbDGZL ¾r ú&…¥‹{~v?¨}=Ä
e5BfLO3zgkEZnQ }+ ¿SQM[²]Œ±k MÒAàtŒÃmMë/£µLsü|Þ…m©CÀñiYC}ƒŽ‡çxŽ€
--- FSgNKEdDeeTjCx9jN9UtOFl58mC/Lbu1PAYRGK0CZW4
U€¿+æ©jïÝ{gø`GŽ›ÆàˆQk]šóïdÐ6å˜úy5T²$Äñs~Ùh‰Ä£òÔ<C3B2>Fº¢ç%°vöÌm<C38C>

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 cKojmg fpiyZo1AR5hCfk/KtbgWCTzz+05/VOUnnaHhWgXQRwc
d2w9IX/kq/T6OwQ1zImsCmzIX2yfFD8hQDbs0IW3ZIA
-> ssh-ed25519 jPowng E9R7p9NCubUQrymjnrNfEjSNIIAXrBQLogNkWsOx8xc
MrWEE5LNtOqAjnwA6byfSa1udnbUtqBy4FhdxipuA+g
--- fKgerjgGs+brvNKnrWdpmOadl34LipMT6Msqse2g3E0
Œ¡E9³ï¬KYRL-‡„°¡Ç·\EŸK{ÃÜ7âço»ïò²XÂGx<0E>ÍT’Î)Ëœôä<C3B4>6°%ˆ­LO€Tðÿ*‰™*8\£É@G

View file

@ -1,8 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg dgS4bezgtDi44R1A8am+J6zh80kUVYTo1heaxJCtzX4 -> ssh-ed25519 cKojmg O3DMSSPQP9/ehXmzs0xcCGllu7VSzhd6b4Pii8t2vWQ
F3w/62xwtqYa40NU7OvF9pnZzYz/5hACAGJfMA4e2zw Ys1nMv2384elWWGW9C8HabvwUeWu52VsQpxx9L/4/dM
-> ssh-ed25519 jPowng lx81CK3yeNp9RjHCUFJeKYZlRzxBmXuADVBvRc13zCI -> ssh-ed25519 jPowng ft/9SX5fpG7+7gHMubaFtb+50/gfNgmaofOVq5UjRUE
P7e75t8xU+ZkYmeQ8mmMfyZZsRdG1J8yrvSUkiWzkFQ xMwdFjFdkH0Li+PikaFt0WAZbFUu5daHgkfN8aQQumo
-> *z4/`-grease S/)a{e sFd";= --- 7DVINvXIXdE1MRwIkeajonYsy1cp4HugCxfTeub5SXU
--- 15FVhqRTkoPFEeETRRyFQhsv4Fn19Ozlax0u8Zy9mNA <¥ö¡Ãñ<ýØ{VÇ?ñfk/¤áI®"<22>ï×/5K"Š¸(ì¢ùiÃÔôìñ
õ#+¥àÎvøSÈ4èá}<7D>§Rì%ίF4fnDœ˜J¹¤Z¸A¥Û™,_

View file

@ -1,9 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg 1+cLlzctgcM0FnVDwMPOAqBkvMcDBRg8SvCw4djI93Y -> ssh-ed25519 cKojmg 0J8FMcVRf78LYG+dTOFzu3luXwhOjdOg0sx4Jxdccj4
oV2XI4f1AvM9P591kZZ6NgJXa+SDtqGzCSgc4psOmxM tdrCcfcYbTZYhL18RG3goiqtyhu3NTn+fJhdIAnU5uA
-> ssh-ed25519 jPowng Ufjfh1p350XxRPg95+/DHdmnl4lC0bbzUUlaxd1Bmxc -> ssh-ed25519 jPowng qlF8nkSEg5fZgai0VP5eTSlZOHyj5IcalTf+QNWITVo
/RHwFDSn2ov+60r1uHUigrsn99+GmmKmlk4h4T2gbA0 O5aiZX0AJD76ixsu6i9xnnFBQANdsu3h6XzdTQ6KtKU
-> *Lc$@-grease --- ByMQt9bnbzd8YO0Y93FIYF/lmdbYcOydkYdKxpRQujM
pzVJAHy1qRq3jUrnFV0DDO7/hwV1US4Ogf0RsrVfX0xzbr73uJ003YjieVB25LqN +堍6JNm裶遁[ Eb1p)vD究侖PL9捦€z逡<7A>煸!縺贿噮'嘥閍顖卷赿5: [控d肯峈撟M抪庱zj<7A>
--- ME7/iVevyiguyhXugbkVFGzJV0yDccyKNlWbEZa/FmY
YžŠXjb2uþnd;i0íýX]…§é0þL„PÔT~óú ƒÙ^kc”$D×ÚÛr¹úu³¶fr€e¸¸þ<C2B8>+p•¨<E280A2><C2A8>&ãw®öϨ

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> ssh-ed25519 cKojmg Lhgx43wR8PtAMf5v1eJxKlUBSAoOLdOOn/QaQrwF8zA
jfUCpgNzkHCNTWCqtErDaLMmg1Oy+s9zUra1JLCi+J4
-> ssh-ed25519 jPowng kSeQ/SmMrzd8ByVu3YHWeZyKmqFZvQSBnDunkB8e6wc
WRmnfrV5xcRXA9t0ZXx6YvbRl0sX4PTrw63VVKX4Ei4
--- a+LLM1gP9g1AbUapbeeKaS4cEcRBmPo3MHU2DSWTAds
Ò,FÜÒ6”â⬘ ixÌ<78>°Øe| «
²
ÌÏœ,{† ˆõvª!†‰zÜ$P;ãé©TØÆÉKW
qGô

View file

@ -1,9 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 jPowng BkIjie2KrwDLaZYYIguCs7TPA/wQy+YPguikuhfye0M -> ssh-ed25519 cKojmg 46BI3ItrXRWMivmd/K8bmkKlrYFSr8cbehAkmwCskig
7viTA/EGYB/jRKQm6fFd86DMd4j+Jxsaw/xQ1T8ZKNo gTjYquH1hDEZ2zWD5P7gN/ejTCH8JJb8bC/VLZ3koeg
-> ssh-ed25519 cKojmg t1Y8bZvPccNAX8vWQLTfCyOJIBXN515vyfFrEI2EVww -> ssh-ed25519 jPowng 5MqfJlasDbbqlI0dX98NZzHxmYmnnpveyBxa4z48V0o
bJEjpIWrKeQrA/JfY7FRdB6hpHwR/aG4Vya1ChFNBKs r7Yiv4+SZiDncD0Xzp5eFSP4f2yjGBOILKxEO1iT3Os
-> jK/-grease Oz.R ?;)G ], --- l43+JtT28i1YDhNX3hE3Qb7swskOBc5ghDqiyh3rU2s
AuHk9TcC9kl0dg8/L6UfHIk3e9fgGwSTJAJpVgInhok Ž+)´”¯ÛPô¢nåWT,.<2E>²eÚNW€Îñ YƱkçÿF4Ê#=˜)üîò™6Ö±ÛmȵîJ<4A>ª#
--- 47z9lol5MtpX0IsO/0ggLDMcNVfl4lNNvoHUSwOU/18
)gЪeuÞ! œš- ÞTì¥YAðM+ˆãGbMe@­|A,è&ãÆE!܆p=P²=û9¹ÙP¹!ÜöQ|Ðä r

View file

@ -1,9 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg lmu3MinmydRHD0A/YVRRtopermfoBC8M8cTHfVanY1s -> ssh-ed25519 cKojmg u+5VWUy7eFq4boAIOhuKXZYD4mhczaUAcjz4+coVggA
ygrtpZZJ7aeQTblNazpoP7DdifmDxHsE3DFJsIrWX5M QlBHHgz7uY3TVgex59yZA0XgsIeHi2WN2S+UleC7bMg
-> ssh-ed25519 jPowng X0cihOc+fBtmtrkEivIHQngdYIobezXEF1x+pHqNzAw -> ssh-ed25519 jPowng IyeI6WUjF8wxe92xD3xY++4ZqXtY8divB39eLWfAtm8
/+sw9x1NWY0anZhDMpAywBPrR0F4XCHaF9e8j/Yo/kI eGj8w5X2ydS1LJvNSmo56xzRVoUB0iAKKs2NHX968Yc
-> 32;%1s-grease --- hsYH9lUl3wIErJmBKzlWV+gIR5v6vgPIcNDgd0hiRGc
JafjuSZty6a4NSO/y4y5wHWL8Mw ¹Ã@Úl<C39A>ôQûsÈ„ÿ×£©Dƒ}^{ºžá¾X)¸nYóJhXhg8wƒž´ ­ “ú°˜Ó¨ÇÇw‡y(œ¸ìê.0>|ÚPSlOÃ|ÈÊE‰õÂÙé°€¡<E282AC>BWó_ˆ³ÜÌ)|x4©„šºë\_F¶
--- dwCl66vdpsL0MR5NWWvg3JUnQ2QZQBeW0Dj0l5tvOKY ZÒo0=dts j<E28093>[ùŽõ0O+ÑÕRž8±‡ÕiüËçŽÜ»ˆõŒæÆdÀ«ß8j»â©ê
oi,`ÓÜ#uÄwW%PoubÚ­cy8<79>ó ƒÃÉ><¿F‰Ååq…ÂKÃÇk0Çk/<2F>hÀ¥Ÿ5势ÝF+ýu‡ •e<06>¾Ÿ²óôbãè>1QŠ2®ñwn˜WbÖB˜âî<C3A2>iŸ^xurâ†- /llùÒÀÀ-ã=°7;jã0»I×%Fi¼<69>í€ø™A;Y†ìUd]KÅI0(½ ”øAg£Ðóž^†uG:äpkJŸ:q<>¢šWSaLw¯¿Ô!ïM³4ã L/ùZŇ®¢D¶-XéUb»vÊbPó0ÇÅfÂ9êú<08> †âJ`ÃX°ôÐOÅ!s{ÙÄQAšc€c;ÏÃÑ4öMíچݹ lxH&ïéöé{é}ÁäÛzZ¦œ9ûÊXžÜ“g‰]Vϱ•0gt¡¿…žw· g¹©$x Œÿò¥Æbâ÷í<C3B7>­˜äX·¢gÂ^¼íùG¼Êô¤Ž$UÏûB*ö°é²¡£ÈÔ)[t¶ÃHa•vŸ7<>ÌÑj£âD.z¸+¬[~–õ ÁÃé9Ùý<C399>àz¼øô`sé¶,_!^YÓïʯ2H¹øS¿¼©øÅ<C3B8>øý*âñó@êjZ^ˆôæÎv~غ¶@ò<>

View file

@ -1,9 +1,8 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg N182xey8TWRVUWTRP16rT0zlhYZNr/pOZVR7YRnlIkk -> ssh-ed25519 cKojmg xRtF3XVc7yPicAV/E4U7mn0itvD0h1BWBTjwunuoe2E
HVqAag55z1cKLgjR3WsUj2wvaVjxm169JcDRJGRvCVU OkB9sjGB3ulH4Feuyj3Ed0DBG4+mghW/Qpum9oXL/8c
-> ssh-ed25519 jPowng Dc+aaUTxDsMTY+oOst0SC3ldq1e6zX8F5A5uBL5RHhc -> ssh-ed25519 jPowng 1r8drqhz1yZdTq0Kvqya+ArU1C2fkN7Gg9LiWWfeUFg
JWZou6+VaFc5f2OLRIrmFFWg3Er6WSY+TloXU0mP1K8 cjbxntVwHvqLaJpiKs/Y8ojeb6e3/cLFcsoeuoobfFg
-> |9_9Aqh%-grease $ X8Mn|5 aKnl' fl<D{T- --- B1qA2PylJBrdZxZtCzlU2kRPvxLM+IrXTvR+ERxVtTY
+fAc0cajqxhYWu55HCY "W9<57>Äbg¸©~Ì/áÕb4ãÕ†ú³ÜÔIÊ
--- SrmtWXQXGYxNTabSrb5tBRXHnK1F22Qoiy7hKYrrF+0 Û}ð §ËÅË-³²ªNó±”ÑC7vWœbºØ?¦8=œÉwÆB ÃUpJClï²OÈ™³œnOÁ\
ñD·û²: ,õn0i<>½Àß^ÆŠ`üÔ2Æ#y'ý9ÖñÓÒŽéÿæ<C3BF>r]Àعx“³S=ú°ˆôuJéEÛóc€lH Ê~ ŸKtévo'êv+

Binary file not shown.

View file

@ -1,10 +1,9 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg OdLtFHbHbc28rUn47vgsVvXxFNg9nF+9y9R6XOK390Y -> ssh-ed25519 cKojmg l5lOlGnbvQ4D2kaSj1dd8Xr+btlNbTkT0SxSz02Vr1E
yQQYUPQGjN2+xrSqqBYa7/zS618KrVjX5Amw2MFuSLg Cjy73yKL1N8LnjRXXLpxX+wIOFCa8wrG44VjXUND1lI
-> ssh-ed25519 jPowng NwUjiLtiXVi6XFmht5l1CxEs3gm0oN4vHYwDZyda7Q4 -> ssh-ed25519 jPowng nYHfkP9dRkxu4Fqh8MgrbdZAc8gk+VGDyxIV6RsSeEM
di6znVjNRO6QdqteVNkeot5Ko2NwWLe6v+zVR3f+o10 rKKi1NDoKMMzQ+kUs5ZX4zMqRBI0QwGY7q6K/L9+dLI
-> 4Vx%\(-grease ^^Z>EC91 R 2BJ d48Wip*s --- Umv3UCtXlApug7uuqmwbQN38i8Lx9/b0uhLgbc3OdZM
yPiBgChRF31XgxccQFLO3MzRL7+5s29sfRoF3W1yUX6Bu59MpxD4D+n/jhLcxSH/ äBLsś ?ÖsÓ“s<E2809C>2Îy
CxW7KaiOctNmPm5tWh6qjmgQ+V4bcAji5vo4FKs40l56cfyueEJj+Q R!<fü9txB7dň<13>™ÚŠň^©ô É‡LJ&ńW €<©e]
--- WUGF28zqK9E1AlOeeCtSHxFg6ikRy85gOoLtBd4m0y0 ţ/$$
.|…rr>©†ðìì1ÅÆ2SÉž.×hw<12>w qºš%i˜øé *U^­)Öè'qžµO2ÓœümòQÝ7˜¯m`

View file

@ -1,10 +1,8 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg zhpo89xef68JoeOFWzhdFshrj2BXXUCFPMLVJzv6EyE -> ssh-ed25519 cKojmg 1hbRAuAGrTy6nmkAq+UWua8weywphZsTIGF68YQEOlQ
fmJxJi5rmyai9qGwDo7iHg4BrObGre96KCpl+g91O6I 92Q7uIKv1EiO73wMh53jrTuEkzP6ziBmX9SWXCl4d3w
-> ssh-ed25519 jPowng INA6EZdy4J1p3QY5mfVOQXiLdOjIDaZR+CZMP+GfkXM -> ssh-ed25519 jPowng aPb9v/S/mLW95Qom+swvasqY878RxpxxOkMJA2wb6nY
8Nf5soaxY5SEzeJca5kaJkx7ByOvc4NkJVetB7wpEmo qu/dzcqciqKzNc28HqFMHA1XnrJy+/wWgbfM1+BrlkE
-> xjK'w-grease --- 8PXOozvZzNZQD2OT4a+0XuIQauzUGSvovdfDugmp+bc
f5v0cvlt4JbHlAwDOob86qOInWdlN/oohTg x²Žê Ã>ùý²ç¦©ðóÁÇ_ÏC9d™T5ŸûKzЄqØcZ©°É¾pŒš¾¡ ใºv
--- NTGv4rr+MhJ/YeZhVHOjoS1V+zCHFf2itJYfK36R+wE )Œ³õ²¥
š×—®JÚ dő oŞę'YFUź@
r7”ă“_N$‰˙Ź–č‡>‚ˇę]hq»-¨FŰ°qX˙?Î| Ę

View file

@ -1,10 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg tZwn2usN6K62oS4vBa6boh9zEp/+cS4chP8boXG6SH4 -> ssh-ed25519 cKojmg r3ZUTfSNcHc1TS2fVtk99Y2xJMMunkwkcR0dQIdiCi4
Fr3kV8gUDoiDqMxPYWsHyww8umYhQEKhqbVBiVw5NeI LICSnzAaooGy6x4wt0vNM6YtQ4S17QohZNt7lfVrD6Q
-> ssh-ed25519 jPowng wRbJl4G85obH/GluQBBsXE7MOvooEui65eqHfurvuQs -> ssh-ed25519 jPowng KLU68ws4lemr0wWHxm8H8pf1SQAoUZTN4QSPzk2PyHk
KqVZMBSyHhkayEdwI6ocmA4qhHY9zYJvg1CEKM1SOa0 6pjH1pI956oaf9ZIHPPq8p3g/mZC5GxWhWkT54Wohf0
-> 2E"/OFW-grease o Qp3HFe^ --- cAQbniTwwtTftfXU/dGtA69yF/hh8iB97vHxvkIZMMo
bGhCNicPqt7txqxUiEWXCFs1OuQLqOqHmjHSqYQv919dqYep/xBXzi/aRf3dsdvh °c#Ž=^Ì~?5ú-w—NT†Ì¡<C38C>¨+¶¨Ä!z¥<7A> " Zö"2ºëðù×M!pž5×V¬ÈÛjçΡѡŽâ¥âL¹ÁÌyóÐŹúš› n÷ÄŠ8zQö°+¨ËÁØ©9WSµ§<C2B5>Æ0¨u}YÚ
TCJCTvZG31Qxvikp
--- xKJGbdVp+Z5h0vCBleSF2zYYYd2S5i0y4szNqjRwrDY
Tª /N¯<4E>¨¹i7m4#³MhiñP¹šÒÞ›Á¥-ÏgI÷ñ±%@E†(iÿ7·ý©ýYg¦k±´"+㸠Àª(þ]o¨¸ý†ð<E280A0>@báÊÞ§+Ï[Y"ÿÌBóóCR[ >-Ë.4d…¤b9v

View file

@ -1,9 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg 8rcBI7fYHuA3jO6EzJNFaAj2niIApKDt1HQEv61AKTs -> ssh-ed25519 cKojmg bICZUDqk/C2divEZu2lxUDsrtS1inSbDbS8hxJSJfHc
ANxkIX/CeI7t7Zqp6wmjt/D194Z+xpeiidb+qvYzoQU FsfueyP6WCesAu5EcXIxxtvbb8RX09qNTN9GvuhYuTw
-> ssh-ed25519 jPowng oruewwTM9X/HjjcmOPcQVdp02rQBlgJPdzvlAffs3T0 -> ssh-ed25519 jPowng Uujsu6c+QTXqCNi6c+zxk5tf0UQcG+Qm/SZF4dzSKCY
MrO0kaNhjgOkNHuz3NrIMWXNrXOHH9dT/Fk6hoQNKyY RPVNNNauz73A8kWA0VSQiMWCerUkxPoXG2MUrFly3Bc
-> COK%H7-grease --- 8h4hGasOwZxk+i5aQfg6AzdA1G4wROhxz2rmM9u41b8
6yfI90QurOKlM+kgpW8KZ/iBzDYD9yhNmjG1LQ {R<>ラ=42<34> y<>咨ッ眺テj嚀廁<E59A80>WQ▽隯%畊ス宅 顕褜返<E8A49C>弁K<E5BC81>蘊マFョモ?埴膕K歯「
--- uArz8eHg8sLO0sdlkM6cELFh+FHiI5BrM0+iXJxxiDo
¿vývû´ÊNÊbæ@Ÿ¡Â<C2A1>FÛMMíYËÆíÌ&‰’/%¤¹Ñm¨®ØtÁÖ“ªd†h„­|¡ðŒß©8¼Ž Ú½¨9®<11>Cã¯/Å

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 cKojmg nJbOfp0/wmFOZLzcWjoGB7wEB8e56aO1NntSmn5KomU
/Vio4Z/t7IPJrdzdwUPidVH3wrouSkwRzNHP0T4z3x0
-> ssh-ed25519 jPowng QXg/xqs7/VfkYQg3X77w4i53q64bL9oYeTxqb9NVhiQ
sMHIXlmrIxtIr+s0X4lBqev/PPd3AKD5P7AP5K4NeJg
--- gzTn+6+aa4Ptic1lsvSt+r3IEBysHrvMMIyONogMDF0
<EFBFBD>ÏÂ<EFBFBD>Ë®UE_í</¯çQ·Ü+U“AГMÄÿ/kï×dAL/”úÕįÍoæ\XïEDÇÑfã\ièĽàpF„`#¬nx1î<31>ûÞèDëàÂË5CéЦ&fòB»q${Gg…Aqˆ³@üVu!Cc…R\ªÖ¨

View file

@ -12,6 +12,8 @@ in
{ {
"acme/dns-key.age".publicKeys = all; "acme/dns-key.age".publicKeys = all;
"aria/rpc-token.age".publicKeys = all;
"backup/password.age".publicKeys = all; "backup/password.age".publicKeys = all;
"backup/credentials.age".publicKeys = all; "backup/credentials.age".publicKeys = all;
@ -19,13 +21,24 @@ in
"drone/secret.age".publicKeys = all; "drone/secret.age".publicKeys = all;
"drone/ssh/private-key.age".publicKeys = all; "drone/ssh/private-key.age".publicKeys = all;
"forgejo/mail-password.age" = {
owner = "git";
publicKeys = all;
};
"gitea/mail-password.age" = { "gitea/mail-password.age" = {
owner = "git"; owner = "git";
publicKeys = all; publicKeys = all;
}; };
"lohr/secret.age".publicKeys = all; "lohr/secret.age" = {
"lohr/ssh-key.age".publicKeys = all; owner = "lohr";
publicKeys = all;
};
"lohr/ssh-key.age" = {
owner = "lohr";
publicKeys = all;
};
"matrix/mail.age" = { "matrix/mail.age" = {
owner = "matrix-synapse"; owner = "matrix-synapse";
@ -39,6 +52,10 @@ in
publicKeys = all; publicKeys = all;
}; };
"mealie/mail.age" = {
publicKeys = all;
};
"miniflux/credentials.age".publicKeys = all; "miniflux/credentials.age".publicKeys = all;
"monitoring/password.age" = { "monitoring/password.age" = {
@ -62,6 +79,8 @@ in
"podgrab/password.age".publicKeys = all; "podgrab/password.age".publicKeys = all;
"pyload/credentials.age".publicKeys = all;
"sso/auth-key.age".publicKeys = all; "sso/auth-key.age".publicKeys = all;
"sso/ambroisie/password-hash.age".publicKeys = all; "sso/ambroisie/password-hash.age".publicKeys = all;
"sso/ambroisie/totp-secret.age".publicKeys = all; "sso/ambroisie/totp-secret.age".publicKeys = all;

View file

@ -1,10 +1,8 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg mP2H3PWJN6Pv3q6C2wci3KnXjtFAIiuGy0YH0sGIy2g -> ssh-ed25519 cKojmg Froxrdh4H2Bsj4X2xicyBXHPRlbkRJAOztoTfzxItSM
f43QqyUQfTYznszub47kgc2Mz95zVScTDkwnG3INi9U FnsLS2QYm8mJUO+c152FieLCFkALxxwQLnY4PAj8zsU
-> ssh-ed25519 jPowng fENbu7+FZ1mnQQHQCLm1spLHmsQGlRoJResUJtGzYkY -> ssh-ed25519 jPowng pKl4p02M+U5JsiOnM2wXL5bkPwsI3IHjlTutlvez3zM
hX+AqCkLCca6m/aKtGCThi7/mCCz/TZQNJNOlOmlqyA NSuOFsyV8JqtTq97lNzacJnJ3YZgWp53XxU3mjUlcMQ
-> J<-grease --- 2TK2ViFblmDheaYdat/GF0ze1wVsla1EPLaeRdMM4Gs
n7+CPRr4oazWnE7yzpJN2ZAI4QrGsAerloP4wNeebjQDx8+IxJq1JE0g3Yi0RxzN ®àµÕ¨ENÜžämÂÛ2uÂ~Ju¼b´´t[Ý$Tñþ^2°<E28093>½jœÙÜi@xªÒ¸*Ä°g[MÞH½½Xš!”‰6Áez¼…¥DW]ÓÕ<‰` XÛâêÁÜÄPóéý÷ÃÞ
chDccuSPLYk45Ov+SD/qqqFZlQ ¶¥q*Îo¼½ÃÑ$‚åÓ<²
--- p81HYw3LFj+qz2kiZsDcevM4ZBfvN743P9Jdi7J9XkM
¢ìÛ±S·7 <EFBFBD>ý£÷ÜãV»»Bðßâø±³ˆ¶ïO‰lEt˜Á…šqý</Ç—Ø©9²ã(ØP†$Wƒ0h;÷‰±àJy¯feø >·_D,PºVFp\æ"AM}èg?<3F>ÿ<EFBFBD>Ý/\²Ä;ùy ¬Óš(<28>ÑSñKË

View file

@ -1,10 +1,8 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 cKojmg +WwRpd2MzycutQFXyLsr2+GzSgF67Z6UuvyqYZaLd3w -> ssh-ed25519 cKojmg KslHl4v8yCsKZn5TduLgpTfpTi1uOInC9N2e8Ow83FI
sppt8HzaZP3yxnvnhzjl18Trnz8g3VyXJ6CaVBWd7jA NzcJJr8kw1ykAdWRZOeWdNhx0BTgE7FwTKcge+yLJ/w
-> ssh-ed25519 jPowng wanoqGB7T8bim/WZ4IAYViFQoGzaIZSgeoTr3YKpeTY -> ssh-ed25519 jPowng YGWcOai0A9l2HDZyV0GtD8kEbY/xTUssODFBcseWAkA
ihDAdGa1XVW/qQz40V1v7a7iK7tu0EHMa7ayIogpcRw nJaHXkipFSHdyektoKV5y1jQrjkvnU7pwZwAymiQm7M
-> l-grease |PIcZ NIr >0;* --- IgWkDulol1jRa+pcx7DbEy5pvC+2nrRJHsdQVPvPur0
4o8o0bevQZ6uDSx1WxxlDCURbFCM+yK1XPdrb9aztCSvG2a+ne78E42l5rBcoH7I Bb<ÅŒb!ÏëE?:ÇÓô=÷srJC<4A>œüKz5ø®Ô{Æ4`¾&N0€ÕÈö¹57ñüví©+´1
m51A8uWS4nSj36N/76v6K4kelxKzWUg +(d§á¡{ ìQŠÙ
--- O6cGbTAVbDcdmPHf7UzfZiyiRtu1yfL4sBI+CkJA1qw
ýqýŐ$ň`żw'čS“X¸]Ąá÷ř®úî…?¤6Đ/ĆN(Bžň N«a” HŽ7żí•I<E280A2>ú÷Ŕoz‡/4:sK",7J

View file

@ -1,10 +1,7 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 jPowng yz0I+AazPmamF7NOnwYNrPE/ArarU01jd2mVDJUPSTY -> ssh-ed25519 cKojmg tAW2hbBSxsael6cdbN+vI4h1/PMNrWYct8cppCAasn0
6Y/YQ7gb8cAZf3zT9SKOorvfUnU7kYff+gHh8fG2mY8 cex/wBTviSIXc8clNm5PGltTYa1Q5PwqlX4BGsNHiyU
-> ssh-ed25519 cKojmg 0FZU9v8eHsVeE+EoX9Y4IgfIj/8+45waPaSnSDb961I -> ssh-ed25519 jPowng YxfhtpytvuhIARQAaJ0w94aOZiGNUOBR0pF+Sp80D2k
L6SzJoh5xqai45scoVAa6v9zslBGFYNnZY044d470uQ nMon/VdYUQTs6LFccDGeIKWeNYib1wwtFmEYZkDZxg0
-> I[G-grease p --- giL477X0+uZ2Ocvbixt5f5kNc1laj5P79oW8P9XsNP0
AMRQY1alSzHi/PLL80kcvnM1Z9YNfoUo9u5alWXYMyzrRsg+vXjMuBvAXg3fmnzr ¨Ãd>ò±cE?nb¹vš_²'2ûûà³<1B>Õµ¥_6Pu:ÊusºE“8õ“ØÏ“xuڶ̪…Îxù̧ïžC[†®°ˆÁ .õêŽ6‰¯  qÌÀÍîJ°Ä5GäKÌ)N<ÊyYÉ¥tX=l7T´2­¨ùRÙ
wdOowTYMRV+jEG8vzkcQTsv+f7JIyo4DvOOaPyGfWMl1
--- ih3IAFPcN1JP3FP1vcRGnPrfk91yrnIX0m/Szkbcf7Q
ÑmW„rµœ_\)Í°]QŠ¦xMÃs/݃ÎݪäœóÍ6óº“k±äÅY§xïMy¶ J¿¸GßÃ)i2_'ÖœHF€þ.âg_Îe5³#uätñØÕ 7j„ŽPñ²'TÞ¥8´•\IàW«UùäK­°1Úº9½è

View file

@ -36,14 +36,14 @@ in
flood = { flood = {
enable = true; enable = true;
}; };
# Gitea forge # Forgejo forge
gitea = { forgejo = {
enable = true; enable = true;
mail = { mail = {
enable = true; enable = true;
host = "smtp.migadu.com:465"; host = "smtp.migadu.com";
user = lib.my.mkMailAddress "gitea" "belanyi.fr"; user = lib.my.mkMailAddress "forgejo" "belanyi.fr";
passwordFile = secrets."gitea/mail-password".path; passwordFile = secrets."forgejo/mail-password".path;
}; };
}; };
# Meta-indexers # Meta-indexers
@ -68,6 +68,10 @@ in
secretFile = secrets."matrix/sliding-sync-secret".path; secretFile = secrets."matrix/sliding-sync-secret".path;
}; };
}; };
mealie = {
enable = true;
credentialsFile = secrets."mealie/mail".path;
};
miniflux = { miniflux = {
enable = true; enable = true;
credentialsFiles = secrets."miniflux/credentials".path; credentialsFiles = secrets."miniflux/credentials".path;
@ -134,6 +138,10 @@ in
}; };
# Regular backups # Regular backups
postgresql-backup.enable = true; postgresql-backup.enable = true;
pyload = {
enable = true;
credentialsFile = secrets."pyload/credentials".path;
};
# RSS provider for websites that do not provide any feeds # RSS provider for websites that do not provide any feeds
rss-bridge.enable = true; rss-bridge.enable = true;
# Usenet client # Usenet client

View file

@ -25,6 +25,8 @@ in
search_mode = "skim"; search_mode = "skim";
# Show long command lines at the bottom # Show long command lines at the bottom
show_preview = true; show_preview = true;
# I like being able to edit my commands
enter_accept = false;
}; };
}; };
}; };

View file

@ -1,4 +1,4 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.my.home.bitwarden; cfg = config.my.home.bitwarden;
in in
@ -6,12 +6,7 @@ in
options.my.home.bitwarden = with lib; { options.my.home.bitwarden = with lib; {
enable = my.mkDisableOption "bitwarden configuration"; enable = my.mkDisableOption "bitwarden configuration";
pinentry = mkOption { pinentry = mkPackageOption pkgs "pinentry" { default = [ "pinentry-tty" ]; };
type = types.str;
default = "tty";
example = "gtk2";
description = "Which pinentry interface to use";
};
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {

View file

@ -23,6 +23,7 @@
./gtk ./gtk
./htop ./htop
./jq ./jq
./keyboard
./mail ./mail
./mpv ./mpv
./nix ./nix
@ -38,6 +39,7 @@
./tmux ./tmux
./udiskie ./udiskie
./vim ./vim
./wget
./wm ./wm
./x ./x
./xdg ./xdg

View file

@ -22,7 +22,7 @@ use_android() {
# Default to the latest version found # Default to the latest version found
local ndk_version="$(_use_android_find_latest "$ANDROID_HOME/ndk" || return 1)" local ndk_version="$(_use_android_find_latest "$ANDROID_HOME/ndk" || return 1)"
local build_tools_version="$(_use_android_find_latest "$ANDROID_SDK_HOME/build-tools" || return 1)" local build_tools_version="$(_use_android_find_latest "$ANDROID_HOME/build-tools" || return 1)"
unset -f _use_android_find_latest unset -f _use_android_find_latest
@ -47,12 +47,11 @@ use_android() {
esac esac
done done
export ANDROID_SDK_HOME="$ANDROID_HOME"
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ndk_version" export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/$ndk_version"
export ANDROID_ROOT="$ANDROID_HOME" export ANDROID_ROOT="$ANDROID_HOME"
export ANDROID_SDK_ROOT="$ANDROID_SDK_HOME" export ANDROID_SDK_ROOT="$ANDROID_HOME"
export ANDROID_NDK_ROOT="$ANDROID_NDK_HOME" export ANDROID_NDK_ROOT="$ANDROID_NDK_HOME"
PATH_add "$ANDROID_NDK_HOME" PATH_add "$ANDROID_NDK_HOME"
PATH_add "$ANDROID_SDK_HOME/build-tools/$build_tools_version" PATH_add "$ANDROID_HOME/build-tools/$build_tools_version"
} }

View file

@ -36,7 +36,7 @@ in
nativeMessagingHosts = ([ ] nativeMessagingHosts = ([ ]
++ lib.optional cfg.tridactyl.enable pkgs.tridactyl-native ++ lib.optional cfg.tridactyl.enable pkgs.tridactyl-native
# Watch videos using mpv # Watch videos using mpv
++ lib.optional cfg.ff2mpv.enable pkgs.ambroisie.ff2mpv-go ++ lib.optional cfg.ff2mpv.enable pkgs.ff2mpv-go
); );
}; };

View file

@ -22,8 +22,8 @@ bind ;c hint -Jc [class*="expand"],[class*="togg"],[class="comment_folder"]
bindurl reddit.com gu urlparent 3 bindurl reddit.com gu urlparent 3
" Only hint search results on Google " Only hint search results on Google
bindurl www.google.com f hint -Jc #search div:not(.action-menu) > a bindurl www.google.com f hint -Jc #search a
bindurl www.google.com F hint -Jbc #search div:not(.action-menu) > a bindurl www.google.com F hint -Jbc #search a
" Only hint search results on DuckDuckGo " Only hint search results on DuckDuckGo
bindurl ^https://duckduckgo.com f hint -Jc [data-testid="result-title-a"] bindurl ^https://duckduckgo.com f hint -Jc [data-testid="result-title-a"]
@ -69,8 +69,6 @@ unbind <C-f>
" Redirections {{{ " Redirections {{{
" Always redirect Reddit to the old site " Always redirect Reddit to the old site
autocmd DocStart ^http(s?)://www.reddit.com js tri.excmds.urlmodify("-t", "www", "old") autocmd DocStart ^http(s?)://www.reddit.com js tri.excmds.urlmodify("-t", "www", "old")
" Use a better Twitter front-end
autocmd DocStart ^http(s?)://twitter.com js tri.excmds.urlmodify("-t", "twitter.com", "nitter.net")
" }}} " }}}
" Disabled websites {{{ " Disabled websites {{{

View file

@ -26,7 +26,14 @@ in
gdb gdb
]; ];
xdg.configFile."gdb/gdbinit".source = ./gdbinit; xdg = {
configFile."gdb/gdbinit".source = ./gdbinit;
dataFile. "gdb/.keep".text = "";
};
home.sessionVariables = {
GDBHISTFILE = "${config.xdg.dataHome}/gdb/gdb_history";
};
} }
(lib.mkIf cfg.rr.enable { (lib.mkIf cfg.rr.enable {

View file

@ -7,6 +7,9 @@ in
{ {
options.my.home.git = with lib; { options.my.home.git = with lib; {
enable = my.mkDisableOption "git configuration"; enable = my.mkDisableOption "git configuration";
# I want the full experience by default
package = mkPackageOption pkgs "git" { default = [ "gitFull" ]; };
}; };
config.home.packages = with pkgs; lib.mkIf cfg.enable [ config.home.packages = with pkgs; lib.mkIf cfg.enable [
@ -22,8 +25,7 @@ in
userEmail = mkMailAddress "bruno" "belanyi.fr"; userEmail = mkMailAddress "bruno" "belanyi.fr";
userName = "Bruno BELANYI"; userName = "Bruno BELANYI";
# I want the full experience inherit (cfg) package;
package = pkgs.gitFull;
aliases = { aliases = {
git = "!git"; git = "!git";
@ -146,6 +148,10 @@ in
autoStash = true; autoStash = true;
}; };
rerere = {
enabled = true;
};
url = { url = {
"git@git.belanyi.fr:" = { "git@git.belanyi.fr:" = {
insteadOf = "https://git.belanyi.fr/"; insteadOf = "https://git.belanyi.fr/";

View file

@ -1,4 +1,4 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.my.home.gpg; cfg = config.my.home.gpg;
in in
@ -6,12 +6,7 @@ in
options.my.home.gpg = with lib; { options.my.home.gpg = with lib; {
enable = my.mkDisableOption "gpg configuration"; enable = my.mkDisableOption "gpg configuration";
pinentry = mkOption { pinentry = mkPackageOption pkgs "pinentry" { default = [ "pinentry-tty" ]; };
type = types.str;
default = "tty";
example = "gtk2";
description = "Which pinentry interface to use";
};
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@ -22,7 +17,7 @@ in
services.gpg-agent = { services.gpg-agent = {
enable = true; enable = true;
enableSshSupport = true; # One agent to rule them all enableSshSupport = true; # One agent to rule them all
pinentryFlavor = cfg.pinentry; pinentryPackage = cfg.pinentry;
extraConfig = '' extraConfig = ''
allow-loopback-pinentry allow-loopback-pinentry
''; '';

View file

@ -1,8 +1,12 @@
{ config, lib, ... }: { config, lib, ... }:
let let
cfg = config.my.home.x; cfg = config.my.home.keyboard;
in in
{ {
options.my.home.keyboard = with lib; {
enable = my.mkDisableOption "keyboard configuration";
};
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.keyboard = { home.keyboard = {
layout = "fr"; layout = "fr";

View file

@ -18,8 +18,6 @@ let
himalaya = { himalaya = {
enable = cfg.himalaya.enable; enable = cfg.himalaya.enable;
# FIXME: try to actually configure it at some point # FIXME: try to actually configure it at some point
backend = "imap";
sender = "smtp";
}; };
msmtp = { msmtp = {

View file

@ -13,6 +13,8 @@ in
scripts = [ scripts = [
pkgs.mpvScripts.mpris # Allow controlling using media keys pkgs.mpvScripts.mpris # Allow controlling using media keys
pkgs.mpvScripts.mpv-cheatsheet # Show some simple mappings on '?'
pkgs.mpvScripts.uosc # Nicer UI
]; ];
}; };
}; };

View file

@ -12,7 +12,7 @@ let
# Use pinned nixpkgs when using `nix run pkgs#<whatever>` # Use pinned nixpkgs when using `nix run pkgs#<whatever>`
pkgs = inputs.nixpkgs; pkgs = inputs.nixpkgs;
} }
(lib.optionalAttrs cfg.overrideNixpkgs { (lib.optionalAttrs cfg.inputs.overrideNixpkgs {
# ... And with `nix run nixpkgs#<whatever>` # ... And with `nix run nixpkgs#<whatever>`
nixpkgs = inputs.nixpkgs; nixpkgs = inputs.nixpkgs;
}) })
@ -22,20 +22,26 @@ in
options.my.home.nix = with lib; { options.my.home.nix = with lib; {
enable = my.mkDisableOption "nix configuration"; enable = my.mkDisableOption "nix configuration";
linkInputs = my.mkDisableOption "link inputs to `$XDG_CONFIG_HOME/nix/inputs`"; cache = {
selfHosted = my.mkDisableOption "self-hosted cache";
};
addToRegistry = my.mkDisableOption "add inputs and self to registry"; inputs = {
link = my.mkDisableOption "link inputs to `/etc/nix/inputs/`";
addToNixPath = my.mkDisableOption "add inputs and self to nix path"; addToRegistry = my.mkDisableOption "add inputs and self to registry";
overrideNixpkgs = my.mkDisableOption "point nixpkgs to pinned system version"; addToNixPath = my.mkDisableOption "add inputs and self to nix path";
overrideNixpkgs = my.mkDisableOption "point nixpkgs to pinned system version";
};
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (lib.mkMerge [
{ {
assertions = [ assertions = [
{ {
assertion = cfg.addToNixPath -> cfg.linkInputs; assertion = cfg.inputs.addToNixPath -> cfg.inputs.link;
message = '' message = ''
enabling `my.home.nix.addToNixPath` needs to have enabling `my.home.nix.addToNixPath` needs to have
`my.home.nix.linkInputs = true` `my.home.nix.linkInputs = true`
@ -54,7 +60,21 @@ in
}; };
} }
(lib.mkIf cfg.addToRegistry { (lib.mkIf cfg.cache.selfHosted {
nix = {
settings = {
extra-substituters = [
"https://cache.belanyi.fr/"
];
extra-trusted-public-keys = [
"cache.belanyi.fr:LPhrTqufwfxTceg1nRWueDWf7/2zSVY9K00pq2UI7tw="
];
};
};
})
(lib.mkIf cfg.inputs.addToRegistry {
nix.registry = nix.registry =
let let
makeEntry = v: { flake = v; }; makeEntry = v: { flake = v; };
@ -63,7 +83,7 @@ in
makeEntries channels; makeEntries channels;
}) })
(lib.mkIf cfg.linkInputs { (lib.mkIf cfg.inputs.link {
xdg.configFile = xdg.configFile =
let let
makeLink = n: v: { makeLink = n: v: {
@ -75,7 +95,7 @@ in
makeLinks channels; makeLinks channels;
}) })
(lib.mkIf cfg.addToNixPath { (lib.mkIf cfg.inputs.addToNixPath {
home.sessionVariables.NIX_PATH = "${config.xdg.configHome}/nix/inputs\${NIX_PATH:+:$NIX_PATH}"; home.sessionVariables.NIX_PATH = "${config.xdg.configHome}/nix/inputs\${NIX_PATH:+:$NIX_PATH}";
}) })
]); ]);

View file

@ -6,6 +6,10 @@ in
options.my.home.packages = with lib; { options.my.home.packages = with lib; {
enable = my.mkDisableOption "user packages"; enable = my.mkDisableOption "user packages";
allowAliases = mkEnableOption "allow package aliases";
allowUnfree = my.mkDisableOption "allow unfree packages";
additionalPackages = mkOption { additionalPackages = mkOption {
type = with types; listOf package; type = with types; listOf package;
default = [ ]; default = [ ];
@ -17,10 +21,15 @@ in
}; };
}; };
config.home.packages = with pkgs; lib.mkIf cfg.enable ([ config = lib.mkIf cfg.enable {
fd home.packages = with pkgs; ([
file fd
mosh file
ripgrep ripgrep
] ++ cfg.additionalPackages); ] ++ cfg.additionalPackages);
nixpkgs.config = {
inherit (cfg) allowAliases allowUnfree;
};
};
} }

View file

@ -16,6 +16,7 @@ in
LESS = "-R -+X -c"; LESS = "-R -+X -c";
# Better XDG compliance # Better XDG compliance
LESSHISTFILE = "${config.xdg.dataHome}/less/history"; LESSHISTFILE = "${config.xdg.dataHome}/less/history";
LESSKEY = "${config.xdg.configHome}/less/lesskey";
}; };
}; };
} }

View file

@ -1,54 +1,70 @@
{ config, lib, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.my.home.ssh; cfg = config.my.home.ssh;
in in
{ {
options.my.home.ssh = with lib; { options.my.home.ssh = with lib; {
enable = my.mkDisableOption "ssh configuration"; enable = my.mkDisableOption "ssh configuration";
};
config.programs.ssh = lib.mkIf cfg.enable { mosh = {
enable = true; enable = my.mkDisableOption "mosh configuration";
includes = [ package = mkPackageOption pkgs "mosh" { };
# Local configuration, not-versioned
"config.local"
];
matchBlocks = {
"github.com" = {
hostname = "github.com";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"gitlab.com" = {
hostname = "gitlab.com";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"git.sr.ht" = {
hostname = "git.sr.ht";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"git.belanyi.fr" = {
hostname = "git.belanyi.fr";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
porthos = {
hostname = "91.121.177.163";
identityFile = "~/.ssh/shared_rsa";
user = "ambroisie";
};
}; };
extraConfig = ''
AddKeysToAgent yes
'';
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [
{
programs.ssh = {
enable = true;
includes = [
# Local configuration, not-versioned
"config.local"
];
matchBlocks = {
"github.com" = {
hostname = "github.com";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"gitlab.com" = {
hostname = "gitlab.com";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"git.sr.ht" = {
hostname = "git.sr.ht";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
"git.belanyi.fr" = {
hostname = "git.belanyi.fr";
identityFile = "~/.ssh/shared_rsa";
user = "git";
};
porthos = {
hostname = "37.187.146.15";
identityFile = "~/.ssh/shared_rsa";
user = "ambroisie";
};
};
extraConfig = ''
AddKeysToAgent yes
'';
};
}
(lib.mkIf cfg.mosh.enable {
home.packages = [
cfg.mosh.package
];
})
]);
} }

View file

@ -5,6 +5,14 @@ let
config.my.home.x.enable config.my.home.x.enable
(config.my.home.wm.windowManager != null) (config.my.home.wm.windowManager != null)
]; ];
mkTerminalFlags = opt: flag:
let
mkFlag = term: ''set -as terminal-features ",${term}:${flag}"'';
enabledTerminals = lib.filterAttrs (_: v: v.${opt}) cfg.terminalFeatures;
terminals = lib.attrNames enabledTerminals;
in
lib.concatMapStringsSep "\n" mkFlag terminals;
in in
{ {
options.my.home.tmux = with lib; { options.my.home.tmux = with lib; {
@ -12,16 +20,22 @@ in
enablePassthrough = mkEnableOption "tmux DCS passthrough sequence"; enablePassthrough = mkEnableOption "tmux DCS passthrough sequence";
trueColorTerminals = mkOption { terminalFeatures = mkOption {
type = with types; listOf str; type = with types; attrsOf (submodule {
default = lib.my.nullableToList config.my.home.terminal.program; options = {
defaultText = '' hyperlinks = my.mkDisableOption "hyperlinks through OSC8";
`[ config.my.home.terminal.program ]` if it is non-null, otherwise an
empty list. trueColor = my.mkDisableOption "24-bit (RGB) color support";
};
});
default = { ${config.my.home.terminal.program} = { }; };
defaultText = litteralExpression ''
{ ''${config.my.home.terminal.program} = { }; };
''; '';
example = [ "xterm-256color" ]; example = { xterm-256color = { }; };
description = '' description = ''
$TERM values which should be considered to always support 24-bit color. $TERM values which should be considered to have additional features.
''; '';
}; };
}; };
@ -32,7 +46,7 @@ in
keyMode = "vi"; # Home-row keys and other niceties keyMode = "vi"; # Home-row keys and other niceties
clock24 = true; # I'm one of those heathens clock24 = true; # I'm one of those heathens
escapeTime = 0; # Let vim do its thing instead escapeTime = 0; # Let vim do its thing instead
historyLimit = 50000; # Bigger buffer historyLimit = 100000; # Bigger buffer
terminal = "tmux-256color"; # I want accurate termcap info terminal = "tmux-256color"; # I want accurate termcap info
plugins = with pkgs.tmuxPlugins; [ plugins = with pkgs.tmuxPlugins; [
@ -89,13 +103,10 @@ in
'' ''
} }
# Force OSC8 hyperlinks for each relevant $TERM
${mkTerminalFlags "hyperlinks" "hyperlinks"}
# Force 24-bit color for each relevant $TERM # Force 24-bit color for each relevant $TERM
${ ${mkTerminalFlags "trueColor" "RGB"}
let
mkTcFlag = term: ''set -as terminal-features ",${term}:RGB"'';
in
lib.concatMapStringsSep "\n" mkTcFlag cfg.trueColorTerminals
}
''; '';
}; };
} }

View file

@ -0,0 +1,6 @@
" Create the `b:undo_ftplugin` variable if it doesn't exist
call ftplugined#check_undo_ft()
" Set comment string, as it seems that no official GN support exists upstream
setlocal commentstring=#\ %s
let b:undo_ftplugin.='|setlocal commentstring<'

View file

@ -105,7 +105,7 @@ in
nixpkgs-fmt nixpkgs-fmt
# Shell # Shell
shellcheck nodePackages.bash-language-server
shfmt shfmt
]; ];
}; };

View file

@ -1,4 +1,4 @@
-- Use Automake filetype for `local.am` files, explicit `set` to force override -- Use Automake filetype for `local.am` files
vim.filetype.add({ vim.filetype.add({
filename = { filename = {
["local.am"] = "automake", ["local.am"] = "automake",

View file

@ -0,0 +1,7 @@
-- Use GLSL filetype for common shader file extensions
vim.filetype.add({
extension = {
frag = "glsl",
vert = "glsl",
},
})

View file

@ -0,0 +1,7 @@
-- Use GN filetype for Chromium Generate Ninja files
vim.filetype.add({
extension = {
gn = "gn",
gni = "gn",
},
})

View file

@ -88,6 +88,23 @@ set background=dark
" 24 bit colors " 24 bit colors
set termguicolors set termguicolors
" Setup some overrides for gruvbox
lua << EOF
local gruvbox = require("gruvbox")
local colors = gruvbox.palette
gruvbox.setup({
overrides = {
-- Only URLs should be underlined
["@string.special.path"] = { link = "GruvboxOrange" },
-- Revert back to the better diff highlighting
DiffAdd = { fg = colors.green, bg = "NONE" },
DiffChange = { fg = colors.aqua, bg = "NONE" },
DiffDelete = { fg = colors.red, bg = "NONE" },
DiffText = { fg = colors.yellow, bg = colors.bg0 },
}
})
EOF
" Use my preferred colorscheme " Use my preferred colorscheme
colorscheme gruvbox colorscheme gruvbox
" }}} " }}}

View file

@ -51,8 +51,7 @@ M.on_attach = function(client, bufnr)
local wk = require("which-key") local wk = require("which-key")
local function list_workspace_folders() local function list_workspace_folders()
local utils = require("ambroisie.utils") vim.print(vim.lsp.buf.list_workspace_folders())
utils.dump(vim.lsp.buf.list_workspace_folders())
end end
local function cycle_diagnostics_display() local function cycle_diagnostics_display()

View file

@ -1,11 +1,5 @@
local M = {} local M = {}
--- pretty print lua object
--- @param obj any object to pretty print
M.dump = function(obj)
print(vim.inspect(obj))
end
--- checks if a given command is executable --- checks if a given command is executable
--- @param cmd string? command to check --- @param cmd string? command to check
--- @return boolean executable --- @return boolean executable
@ -15,7 +9,7 @@ end
--- return a function that checks if a given command is executable --- return a function that checks if a given command is executable
--- @param cmd string? command to check --- @param cmd string? command to check
--- @return fun(cmd: string): boolean executable --- @return fun(): boolean executable
M.is_executable_condition = function(cmd) M.is_executable_condition = function(cmd)
return function() return function()
return M.is_executable(cmd) return M.is_executable(cmd)
@ -40,11 +34,11 @@ M.is_ssh = function()
return false return false
end end
--- list all active LSP clients for current buffer --- list all active LSP clients for specific buffer, or all buffers
--- @param bufnr int? buffer number --- @param bufnr int? buffer number
--- @return table all active LSP client names --- @return table all active LSP client names
M.list_lsp_clients = function(bufnr) M.list_lsp_clients = function(bufnr)
local clients = vim.lsp.buf_get_clients(bufnr) local clients = vim.lsp.get_active_clients({ bufnr = bufnr })
local names = {} local names = {}
for _, client in ipairs(clients) do for _, client in ipairs(clients) do

View file

@ -29,16 +29,17 @@ if utils.is_executable("clangd") then
}) })
end end
-- Nix -- Haskell
if utils.is_executable("nil") then if utils.is_executable("haskell-language-server-wrapper") then
lspconfig.nil_ls.setup({ lspconfig.hls.setup({
capabilities = capabilities, capabilities = capabilities,
on_attach = lsp.on_attach, on_attach = lsp.on_attach,
}) })
end end
if utils.is_executable("rnix-lsp") then -- Nix
lspconfig.rnix.setup({ if utils.is_executable("nil") then
lspconfig.nil_ls.setup({
capabilities = capabilities, capabilities = capabilities,
on_attach = lsp.on_attach, on_attach = lsp.on_attach,
}) })
@ -52,6 +53,13 @@ if utils.is_executable("pyright") then
}) })
end end
if utils.is_executable("ruff-lsp") then
lspconfig.ruff_lsp.setup({
capabilities = capabilities,
on_attach = lsp.on_attach,
})
end
-- Rust -- Rust
if utils.is_executable("rust-analyzer") then if utils.is_executable("rust-analyzer") then
lspconfig.rust_analyzer.setup({ lspconfig.rust_analyzer.setup({
@ -59,3 +67,12 @@ if utils.is_executable("rust-analyzer") then
on_attach = lsp.on_attach, on_attach = lsp.on_attach,
}) })
end end
-- Shell
if utils.is_executable("bash-language-server") then
lspconfig.bashls.setup({
filetypes = { "bash", "sh", "zsh" },
capabilities = capabilities,
on_attach = lsp.on_attach,
})
end

View file

@ -10,7 +10,7 @@ local function list_spell_languages()
end end
local function list_lsp_clients() local function list_lsp_clients()
local client_names = utils.list_lsp_clients() local client_names = utils.list_lsp_clients(0)
if #client_names == 0 then if #client_names == 0 then
return "" return ""

View file

@ -28,38 +28,16 @@ null_ls.register({
}), }),
}) })
-- Haskell
null_ls.register({
null_ls.builtins.formatting.brittany.with({
-- Only used if available
condition = utils.is_executable_condition("brittany"),
}),
})
-- Nix -- Nix
null_ls.register({ null_ls.register({
null_ls.builtins.formatting.nixpkgs_fmt.with({ null_ls.builtins.formatting.nixpkgs_fmt.with({
-- Only used if available, but prefer rnix if available -- Only used if available
condition = function() condition = utils.is_executable_condition("nixpkgs-fmt"),
return utils.is_executable("nixpkgs-fmt")
and not utils.is_executable("rnix-lsp")
and not utils.is_executable("nil")
end,
}), }),
}) })
-- Python -- Python
null_ls.register({ null_ls.register({
null_ls.builtins.diagnostics.flake8.with({
-- Only used if available, but prefer pflake8 if available
condition = function()
return utils.is_executable("flake8") and not utils.is_executable("pflake8")
end,
}),
null_ls.builtins.diagnostics.pyproject_flake8.with({
-- Only used if available
condition = utils.is_executable_condition("pflake8"),
}),
null_ls.builtins.diagnostics.mypy.with({ null_ls.builtins.diagnostics.mypy.with({
-- Only used if available -- Only used if available
condition = utils.is_executable_condition("mypy"), condition = utils.is_executable_condition("mypy"),
@ -81,22 +59,6 @@ null_ls.register({
-- Shell (non-POSIX) -- Shell (non-POSIX)
null_ls.register({ null_ls.register({
null_ls.builtins.code_actions.shellcheck.with({
-- Restrict to bash and zsh
filetypes = { "bash", "zsh" },
-- Only used if available
condition = utils.is_executable_condition("shellcheck"),
}),
null_ls.builtins.diagnostics.shellcheck.with({
-- Show error code in message
diagnostics_format = "[#{c}] #{m}",
-- Require explicit empty string test, use bash dialect
extra_args = { "-s", "bash", "-o", "avoid-nullary-conditions" },
-- Restrict to bash and zsh
filetypes = { "bash", "zsh" },
-- Only used if available
condition = utils.is_executable_condition("shellcheck"),
}),
null_ls.builtins.formatting.shfmt.with({ null_ls.builtins.formatting.shfmt.with({
-- Indent with 4 spaces, simplify the code, indent switch cases, -- Indent with 4 spaces, simplify the code, indent switch cases,
-- add space after redirection, use bash dialect -- add space after redirection, use bash dialect
@ -110,22 +72,6 @@ null_ls.register({
-- Shell (POSIX) -- Shell (POSIX)
null_ls.register({ null_ls.register({
null_ls.builtins.code_actions.shellcheck.with({
-- Restrict to POSIX sh
filetypes = { "sh" },
-- Only used if available
condition = utils.is_executable_condition("shellcheck"),
}),
null_ls.builtins.diagnostics.shellcheck.with({
-- Show error code in message
diagnostics_format = "[#{c}] #{m}",
-- Require explicit empty string test
extra_args = { "-o", "avoid-nullary-conditions" },
-- Restrict to POSIX sh
filetypes = { "sh" },
-- Only used if available
condition = utils.is_executable_condition("shellcheck"),
}),
null_ls.builtins.formatting.shfmt.with({ null_ls.builtins.formatting.shfmt.with({
-- Indent with 4 spaces, simplify the code, indent switch cases, -- Indent with 4 spaces, simplify the code, indent switch cases,
-- add space after redirection, use POSIX -- add space after redirection, use POSIX

View file

@ -8,9 +8,6 @@ ts_config.setup({
indent = { indent = {
enable = true, enable = true,
}, },
context_commentstring = {
enable = true,
},
textobjects = { textobjects = {
select = { select = {
enable = true, enable = true,

View file

@ -0,0 +1,26 @@
{ config, pkgs, lib, ... }:
let
cfg = config.my.home.wget;
in
{
options.my.home.wget = with lib; {
enable = my.mkDisableOption "wget configuration";
package = mkPackageOption pkgs "wget" { };
};
config = lib.mkIf cfg.enable {
home.packages = [
cfg.package
];
home.sessionVariables = lib.mkIf cfg.enable {
WGETRC = "${config.xdg.configHome}/wgetrc";
};
xdg.configFile."wgetrc".text = ''
hsts-file = ${config.xdg.dataHome}/wget-hsts
'';
};
}

View file

@ -8,7 +8,7 @@ in
{ {
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
home.pointerCursor = { home.pointerCursor = {
package = pkgs.ambroisie.vimix-cursors; package = pkgs.vimix-cursors;
name = "Vimix-cursors"; name = "Vimix-cursors";
x11 = { x11 = {

View file

@ -36,6 +36,31 @@ in
i3bar = { i3bar = {
enable = mkRelatedOption "i3bar configuration" [ "i3" ]; enable = mkRelatedOption "i3bar configuration" [ "i3" ];
vpn = {
enable = my.mkDisableOption "VPN configuration";
blockConfigs = mkOption {
type = with types; listOf (attrsOf str);
default = [
{
active_format = " VPN ";
service = "wg-quick-wg";
}
{
active_format = " VPN (LAN) ";
service = "wg-quick-lan";
}
];
example = [
{
active_format = " WORK ";
service = "some-service-name";
}
];
description = "list of block configurations, merged with the defauls";
};
};
}; };
rofi = { rofi = {

View file

@ -129,6 +129,7 @@ in
{ class = "^Thunderbird$"; instance = "Mailnews"; window_role = "filterlist"; } { class = "^Thunderbird$"; instance = "Mailnews"; window_role = "filterlist"; }
{ class = "^Pavucontrol.*$"; } { class = "^Pavucontrol.*$"; }
{ class = "^Arandr$"; } { class = "^Arandr$"; }
{ class = ".?blueman-manager.*$"; }
]; ];
}; };
@ -196,7 +197,7 @@ in
inherit (config.my.home.bluetooth) enable; inherit (config.my.home.bluetooth) enable;
prog = lib.getExe pkgs.rofi-bluetooth; prog = lib.getExe pkgs.rofi-bluetooth;
in in
lib.mkIf enable "exec ${prog}"; lib.mkIf enable "exec ${prog} -i";
}) })
( (
# Changing container focus # Changing container focus

View file

@ -17,25 +17,11 @@ in
top = { top = {
icons = "awesome5"; icons = "awesome5";
blocks = builtins.filter (attr: attr != { }) [ blocks = builtins.filter (attr: attr != { }) (lib.flatten [
{ {
block = "music"; block = "music";
# This format seems to remove the block when not playing, somehow # This format seems to remove the block when not playing, somehow
format = "{ $icon $combo.str(max_w:50,rot_interval:0.5) $prev $play $next |}"; format = "{ $icon $combo.str(max_w:50,rot_interval:0.5) $prev $play $next |}";
click = [
{
button = "play";
action = "music_play";
}
{
button = "prev";
action = "music_prev";
}
{
button = "next";
action = "music_next";
}
];
} }
(lib.optionalAttrs config.my.home.bluetooth.enable { (lib.optionalAttrs config.my.home.bluetooth.enable {
block = "bluetooth"; block = "bluetooth";
@ -73,9 +59,22 @@ in
{ {
block = "disk_space"; block = "disk_space";
} }
(lib.optionals cfg.vpn.enable
(
let
defaults = {
block = "service_status";
active_state = "Good";
inactive_format = "";
inactive_state = "Idle";
};
in
builtins.map (block: defaults // block) cfg.vpn.blockConfigs
)
)
{ {
block = "net"; block = "net";
format = " $icon{| $ssid|} $ip{| $signal_strength|} "; format = " $icon{| $ssid|}{| $ip|}{| $signal_strength|} ";
} }
{ {
block = "backlight"; block = "backlight";
@ -106,7 +105,7 @@ in
format = " $icon $timestamp.datetime(f:'%F %T') "; format = " $icon $timestamp.datetime(f:'%F %T') ";
interval = 5; interval = 5;
} }
]; ]);
}; };
}; };
}; };

View file

@ -3,10 +3,6 @@ let
cfg = config.my.home.x; cfg = config.my.home.x;
in in
{ {
imports = [
./keyboard
];
options.my.home.x = with lib; { options.my.home.x = with lib; {
enable = mkEnableOption "X server configuration"; enable = mkEnableOption "X server configuration";
}; };

View file

@ -39,16 +39,19 @@ in
# I want a tidier home # I want a tidier home
config.home.sessionVariables = with config.xdg; lib.mkIf cfg.enable { config.home.sessionVariables = with config.xdg; lib.mkIf cfg.enable {
ANDROID_HOME = "${dataHome}/android"; ANDROID_HOME = "${dataHome}/android";
ANDROID_USER_HOME = "${configHome}/android";
CARGO_HOME = "${dataHome}/cargo"; CARGO_HOME = "${dataHome}/cargo";
DOCKER_CONFIG = "${configHome}/docker"; DOCKER_CONFIG = "${configHome}/docker";
GDBHISTFILE = "${dataHome}/gdb/gdb_history"; GRADLE_USER_HOME = "${dataHome}/gradle";
HISTFILE = "${dataHome}/bash/history"; HISTFILE = "${dataHome}/bash/history";
INPUTRC = "${configHome}/readline/inputrc"; INPUTRC = "${configHome}/readline/inputrc";
LESSHISTFILE = "${dataHome}/less/history";
LESSKEY = "${configHome}/less/lesskey";
PSQL_HISTORY = "${dataHome}/psql_history"; PSQL_HISTORY = "${dataHome}/psql_history";
REPO_CONFIG_DIR = "${configHome}/repo"; PYTHONPYCACHEPREFIX = "${cacheHome}/python/";
PYTHONUSERBASE = "${dataHome}/python/";
PYTHON_HISTORY = "${stateHome}/python/history";
REDISCLI_HISTFILE = "${dataHome}/redis/rediscli_history"; REDISCLI_HISTFILE = "${dataHome}/redis/rediscli_history";
REPO_CONFIG_DIR = "${configHome}/repo";
XCOMPOSECACHE = "${dataHome}/X11/xcompose"; XCOMPOSECACHE = "${dataHome}/X11/xcompose";
_JAVA_OPTIONS = "-Djava.util.prefs.userRoot=${configHome}/java";
}; };
} }

View file

@ -15,81 +15,152 @@ in
enable = my.mkDisableOption "zsh configuration"; enable = my.mkDisableOption "zsh configuration";
launchTmux = mkEnableOption "auto launch tmux at shell start"; launchTmux = mkEnableOption "auto launch tmux at shell start";
};
config = lib.mkIf cfg.enable { notify = {
home.packages = with pkgs; [ enable = mkEnableOption "zsh-done notification";
zsh-completions
];
programs.zsh = { exclude = mkOption {
enable = true; type = with types; listOf str;
dotDir = "${relativeXdgConfig}/zsh"; # Don't clutter $HOME default = [
enableCompletion = true; "delta"
"direnv reload"
history = { "fg"
size = 500000; "git (?!push|pull|fetch)"
save = 500000; "htop"
extended = true; "less"
expireDuplicatesFirst = true; "man"
ignoreSpace = true; "nvim"
ignoreDups = true; "tail -f"
share = false; "tmux"
path = "${config.xdg.dataHome}/zsh/zsh_history"; "vim"
];
example = [ "command --long-running-option" ];
description = ''
List of exclusions which should not be create a notification. Accepts
Perl regexes (implicitly anchored with `^\s*`).
'';
}; };
plugins = [ ssh = {
{ enable = mkEnableOption "notify through SSH/non-graphical connections";
name = "fast-syntax-highlighting";
file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh";
src = pkgs.zsh-fast-syntax-highlighting;
}
{
name = "agkozak-zsh-prompt";
file = "share/zsh/site-functions/agkozak-zsh-prompt.plugin.zsh";
src = pkgs.agkozak-zsh-prompt;
}
];
# Modal editing is life, but CLI benefits from emacs gymnastics useOsc777 = lib.my.mkDisableOption "use OSC-777 for notifications";
defaultKeymap = "emacs";
# Make those happen early to avoid doing double the work
initExtraFirst = ''
${
lib.optionalString cfg.launchTmux ''
# Launch tmux unless already inside one
if [ -z "$TMUX" ]; then
exec tmux new-session
fi
''
}
'';
initExtra = ''
source ${./completion-styles.zsh}
source ${./extra-mappings.zsh}
source ${./options.zsh}
# Source local configuration
if [ -f "$ZDOTDIR/zshrc.local" ]; then
source "$ZDOTDIR/zshrc.local"
fi
'';
localVariables = {
# I like having the full path
AGKOZAK_PROMPT_DIRTRIM = 0;
# Because I *am* from EPITA
AGKOZAK_PROMPT_CHAR = [ "42sh$" "42sh#" ":" ];
# Easy on the eyes
AGKOZAK_COLORS_BRANCH_STATUS = "magenta";
# I don't like moving my eyes
AGKOZAK_LEFT_PROMPT_ONLY = 1;
}; };
# Enable VTE integration
enableVteIntegration = true;
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [
{
home.packages = with pkgs; [
zsh-completions
];
programs.zsh = {
enable = true;
dotDir = "${relativeXdgConfig}/zsh"; # Don't clutter $HOME
enableCompletion = true;
history = {
size = 500000;
save = 500000;
extended = true;
expireDuplicatesFirst = true;
ignoreSpace = true;
ignoreDups = true;
share = false;
path = "${config.xdg.dataHome}/zsh/zsh_history";
};
plugins = [
{
name = "fast-syntax-highlighting";
file = "share/zsh/site-functions/fast-syntax-highlighting.plugin.zsh";
src = pkgs.zsh-fast-syntax-highlighting;
}
{
name = "agkozak-zsh-prompt";
file = "share/zsh/site-functions/agkozak-zsh-prompt.plugin.zsh";
src = pkgs.agkozak-zsh-prompt;
}
];
# Modal editing is life, but CLI benefits from emacs gymnastics
defaultKeymap = "emacs";
# Make those happen early to avoid doing double the work
initExtraFirst = lib.mkBefore ''
${
lib.optionalString cfg.launchTmux ''
# Launch tmux unless already inside one
if [ -z "$TMUX" ]; then
exec tmux new-session
fi
''
}
'';
initExtra = lib.mkAfter ''
source ${./completion-styles.zsh}
source ${./extra-mappings.zsh}
source ${./options.zsh}
# Source local configuration
if [ -f "$ZDOTDIR/zshrc.local" ]; then
source "$ZDOTDIR/zshrc.local"
fi
'';
localVariables = {
# I like having the full path
AGKOZAK_PROMPT_DIRTRIM = 0;
# Because I *am* from EPITA
AGKOZAK_PROMPT_CHAR = [ "42sh$" "42sh#" ":" ];
# Easy on the eyes
AGKOZAK_COLORS_BRANCH_STATUS = "magenta";
# I don't like moving my eyes
AGKOZAK_LEFT_PROMPT_ONLY = 1;
};
# Enable VTE integration
enableVteIntegration = true;
};
}
(lib.mkIf cfg.notify.enable {
programs.zsh = {
plugins = [
{
name = "zsh-done";
file = "share/zsh/site-functions/done.plugin.zsh";
src = pkgs.ambroisie.zsh-done;
}
];
# `localVariables` values don't get merged correctly due to their type,
# don't use `mkIf`
localVariables = {
DONE_EXCLUDE =
let
joined = lib.concatMapStringsSep "|" (c: "(${c})") cfg.notify.exclude;
in
''^\s*(${joined})'';
}
# Enable `zsh-done` through SSH, if configured
// lib.optionalAttrs cfg.notify.ssh.enable {
DONE_ALLOW_NONGRAPHICAL = 1;
};
# Use OSC-777 to send the notification through SSH
initExtra = lib.mkIf cfg.notify.ssh.useOsc777 ''
done_send_notification() {
local exit_status="$1"
local title="$2"
local message="$3"
${lib.getExe pkgs.ambroisie.osc777} "$title" "$message"
}
'';
};
})
]);
} }

View file

@ -25,8 +25,8 @@ in
package = pkgs.pulseaudioFull; package = pkgs.pulseaudioFull;
}; };
environment.etc = { services.pipewire.wireplumber.configPackages = [
"wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = '' (pkgs.writeTextDir "share/wireplumber/bluetooth.lua.d/51-bluez-config.lua" ''
bluez_monitor.properties = { bluez_monitor.properties = {
-- SBC XQ provides better audio -- SBC XQ provides better audio
["bluez5.enable-sbc-xq"] = true, ["bluez5.enable-sbc-xq"] = true,
@ -40,8 +40,8 @@ in
-- FIXME: Some devices may now support both hsp_ag and hfp_ag -- FIXME: Some devices may now support both hsp_ag and hfp_ag
["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]" ["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
} }
''; '')
}; ];
}) })
# Support for A2DP audio profile # Support for A2DP audio profile

View file

@ -6,9 +6,10 @@
./bluetooth ./bluetooth
./ergodox ./ergodox
./firmware ./firmware
./mx-ergo ./graphics
./networking ./networking
./sound ./sound
./trackball
./upower ./upower
]; ];
} }

View file

@ -0,0 +1,75 @@
{ config, lib, pkgs, ... }:
let
cfg = config.my.hardware.graphics;
in
{
options.my.hardware.graphics = with lib; {
enable = mkEnableOption "graphics configuration";
gpuFlavor = mkOption {
type = with types; nullOr (enum [ "amd" "intel" ]);
default = null;
example = "intel";
description = "Which kind of GPU to install driver for";
};
amd = {
enableKernelModule = lib.my.mkDisableOption "Kernel driver module";
amdvlk = lib.mkEnableOption "Use AMDVLK instead of Mesa RADV driver";
};
intel = {
enableKernelModule = lib.my.mkDisableOption "Kernel driver module";
};
};
config = lib.mkIf cfg.enable (lib.mkMerge [
{
hardware.opengl = {
enable = true;
};
}
# AMD GPU
(lib.mkIf (cfg.gpuFlavor == "amd") {
boot.initrd.kernelModules = lib.mkIf cfg.amd.enableKernelModule [ "amdgpu" ];
hardware.opengl = {
extraPackages = with pkgs; [
# OpenCL
rocmPackages.clr
rocmPackages.clr.icd
]
++ lib.optional cfg.amd.amdvlk amdvlk
;
extraPackages32 = with pkgs; [
]
++ lib.optional cfg.amd.amdvlk driversi686Linux.amdvlk
;
};
})
# Intel GPU
(lib.mkIf (cfg.gpuFlavor == "intel") {
boot.initrd.kernelModules = lib.mkIf cfg.intel.enableKernelModule [ "i915" ];
environment.variables = {
VDPAU_DRIVER = "va_gl";
};
hardware.opengl = {
extraPackages = with pkgs; [
# Open CL
intel-compute-runtime
# VA API
intel-media-driver
intel-vaapi-driver
libvdpau-va-gl
];
};
})
]);
}

View file

@ -1,11 +1,11 @@
# Hold down the `next page` button to scroll using the ball # Hold down the `next page` button to scroll using the ball
{ config, lib, ... }: { config, lib, ... }:
let let
cfg = config.my.hardware.mx-ergo; cfg = config.my.hardware.trackball;
in in
{ {
options.my.hardware.mx-ergo = with lib; { options.my.hardware.trackball = with lib; {
enable = mkEnableOption "MX Ergo configuration"; enable = mkEnableOption "trackball configuration";
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@ -13,6 +13,7 @@ in
# This section must be *after* the one configured by `libinput` # This section must be *after* the one configured by `libinput`
# for the `ScrollMethod` configuration to not be overriden # for the `ScrollMethod` configuration to not be overriden
inputClassSections = lib.mkAfter [ inputClassSections = lib.mkAfter [
# MX Ergo
'' ''
Identifier "MX Ergo scroll button configuration" Identifier "MX Ergo scroll button configuration"
MatchProduct "MX Ergo" MatchProduct "MX Ergo"

View file

@ -11,7 +11,7 @@ in
my.hardware = { my.hardware = {
ergodox.enable = true; ergodox.enable = true;
mx-ergo.enable = true; trackball.enable = true;
}; };
# MTP devices auto-mount via file explorers # MTP devices auto-mount via file explorers

View file

@ -0,0 +1,76 @@
{ config, lib, pkgs, ... }:
let
cfg = config.my.services.aria;
in
{
options.my.services.aria = with lib; {
enable = mkEnableOption "";
rpcSecretFile = mkOption {
type = types.str;
example = "/run/secrets/aria-secret.txt";
description = ''
File containing the RPC secret.
'';
};
rpcPort = mkOption {
type = types.port;
default = 6800;
example = 8080;
description = "RPC port";
};
downloadDir = mkOption {
type = types.str;
default = "/data/downloads";
example = "/var/lib/transmission/download";
description = "Download directory";
};
};
config = lib.mkIf cfg.enable {
services.aria2 = {
enable = true;
inherit (cfg) downloadDir rpcSecretFile;
rpcListenPort = cfg.rpcPort;
openPorts = false; # I don't want to expose the RPC port
};
# Expose DHT ports
networking.firewall = {
# FIXME: check for overlap?
allowedUDPPortRanges = config.services.aria2.listenPortRange;
};
# Set-up media group
users.groups.media = { };
systemd.services.aria2 = {
serviceConfig = {
Group = lib.mkForce "media"; # Use 'media' group
};
};
my.services.nginx.virtualHosts = {
aria = {
root = "${pkgs.ariang}/share/ariang";
# For paranoia, don't allow anybody to use the UI unauthenticated
sso = {
enable = true;
};
};
aria-rpc = {
port = cfg.rpcPort;
# Proxy websockets for RPC
extraConfig = {
locations."/".proxyWebsockets = true;
};
};
};
# NOTE: unfortunately aria2 does not log connection failures for fail2ban
};
}

View file

@ -89,6 +89,16 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
# Essential files which should always be backed up
my.services.backup.paths = lib.flatten [
# Should be unique to a given host, used by some software (e.g: ZFS)
"/etc/machine-id"
# Contains the UID/GID map, and other useful state
"/var/lib/nixos"
# SSH host keys (and public keys for convenience)
(builtins.map (key: [ key.path "${key.path}.pub" ]) config.services.openssh.hostKeys)
];
services.restic.backups.backblaze = { services.restic.backups.backblaze = {
# Take care of included and excluded files # Take care of included and excluded files
paths = cfg.paths; paths = cfg.paths;

View file

@ -5,11 +5,10 @@ let
domain = config.networking.domain; domain = config.networking.domain;
makeHostInfo = subdomain: { makeHostInfo = subdomain: {
inherit subdomain;
root = "/var/www/${subdomain}"; root = "/var/www/${subdomain}";
}; };
hostsInfo = map makeHostInfo [ "cv" "dev" "key" ]; hostsInfo = lib.flip lib.genAttrs makeHostInfo [ "cv" "dev" "key" ];
in in
{ {
options.my.services.blog = { options.my.services.blog = {
@ -36,7 +35,7 @@ in
useACMEHost = domain; useACMEHost = domain;
default = true; default = true;
locations."/".return = "302 https://belanyi.fr$request_uri"; locations."/".return = "302 https://${domain}$request_uri";
}; };
}; };

View file

@ -40,12 +40,11 @@ in
# Set-up media group # Set-up media group
users.groups.media = { }; users.groups.media = { };
my.services.nginx.virtualHosts = [ my.services.nginx.virtualHosts = {
{ library = {
subdomain = "library";
inherit (cfg) port; inherit (cfg) port;
} };
]; };
my.services.backup = { my.services.backup = {
paths = [ paths = [

View file

@ -3,18 +3,21 @@
{ {
imports = [ imports = [
./adblock ./adblock
./aria
./backup ./backup
./blog ./blog
./calibre-web ./calibre-web
./drone ./drone
./fail2ban ./fail2ban
./flood ./flood
./forgejo
./gitea ./gitea
./grocy ./grocy
./indexers ./indexers
./jellyfin ./jellyfin
./lohr ./lohr
./matrix ./matrix
./mealie
./miniflux ./miniflux
./monitoring ./monitoring
./navidrome ./navidrome
@ -26,6 +29,7 @@
./podgrab ./podgrab
./postgresql ./postgresql
./postgresql-backup ./postgresql-backup
./pyload
./quassel ./quassel
./rss-bridge ./rss-bridge
./sabnzbd ./sabnzbd

Some files were not shown because too many files have changed in this diff Show more