373 changed files with 42456 additions and 1 deletions
@ -0,0 +1,11 @@ |
|||||
|
root = true |
||||
|
|
||||
|
[*] |
||||
|
end_of_line = lf |
||||
|
insert_final_newline = true |
||||
|
charset = utf-8 |
||||
|
trim_trailing_whitespace = true |
||||
|
|
||||
|
[*.nix] |
||||
|
ident_style = space |
||||
|
ident_size = 2 |
||||
@ -0,0 +1 @@ |
|||||
|
use flake |
||||
@ -0,0 +1,3 @@ |
|||||
|
nixos/hosts/*/secrets/*.yaml diff=sopsdiffer |
||||
|
nixos/common/secrets/*.yaml diff=sopsdiffer |
||||
|
nix linguist-generated=true |
||||
@ -0,0 +1,4 @@ |
|||||
|
.direnv |
||||
|
result* |
||||
|
*.qcow2 |
||||
|
.nixie |
||||
@ -0,0 +1,26 @@ |
|||||
|
{ |
||||
|
"main": { |
||||
|
"enabled": 1, |
||||
|
"type": 1, |
||||
|
"hidden": false, |
||||
|
"description": "Build main branch", |
||||
|
"flake": "github:misterio77/nix-config/main", |
||||
|
"checkinterval": 60, |
||||
|
"schedulingshares": 10, |
||||
|
"enableemail": false, |
||||
|
"emailoverride": "", |
||||
|
"keepnr": 2 |
||||
|
}, |
||||
|
"next": { |
||||
|
"enabled": 1, |
||||
|
"type": 1, |
||||
|
"hidden": false, |
||||
|
"description": "Build next branch", |
||||
|
"flake": "github:misterio77/nix-config/next", |
||||
|
"checkinterval": 60, |
||||
|
"schedulingshares": 5, |
||||
|
"enableemail": false, |
||||
|
"emailoverride": "", |
||||
|
"keepnr": 1 |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
keys: |
||||
|
# Users |
||||
|
- &users: |
||||
|
- &misterio 7088C7421873E0DB97FF17C2245CAB70B4C225E9 |
||||
|
# Hosts |
||||
|
- &hosts: |
||||
|
- &atlas age1hm5lf4qk84r4wh00atn6hpts7mpdx80adq26wht2e5qh9ewvhyaszfv82d |
||||
|
- &merope age1709qfrwglm75v5x8lpuhryt83k6p6c90npplzzec6a5w8ct93ejscpqpc3 |
||||
|
- &pleione age1j9ld6ey62hqd33xkyd2fg9362k6xhm5gavsrpsfalwpcs8smxfdqpk84a2 |
||||
|
- &maia age1dn7pkareh83k8el2yt4dmdfdzn7f45fuc785cnnxgzf3h4r5gqhqd4l93h |
||||
|
- &alcyone age1uxvuygmvwpfjrd9d3ulg6ln8dgvaw4l2c90mw0tr72qg3n8vd9ns3dm000 |
||||
|
- &celaeno age1gxhy9eq38xfplay0kvkeyvsg96g0c4p6rkhajkrj8nc9dswdzqhssgvns0 |
||||
|
- &electra age1n06f4dcslh8xq686z2fa9ddr3yg5yzj87p727896xsm8xvusdv6qan0grl |
||||
|
|
||||
|
creation_rules: |
||||
|
- path_regex: hosts/celaeno/secrets.ya?ml$ |
||||
|
key_groups: |
||||
|
- age: |
||||
|
- *celaeno |
||||
|
pgp: |
||||
|
- *misterio |
||||
|
- path_regex: hosts/alcyone/secrets.ya?ml$ |
||||
|
key_groups: |
||||
|
- age: |
||||
|
- *alcyone |
||||
|
pgp: |
||||
|
- *misterio |
||||
|
- path_regex: hosts/merope/secrets.ya?ml$ |
||||
|
key_groups: |
||||
|
- age: |
||||
|
- *merope |
||||
|
pgp: |
||||
|
- *misterio |
||||
|
|
||||
|
- path_regex: hosts/common/secrets.ya?ml$ |
||||
|
key_groups: |
||||
|
- age: |
||||
|
- *atlas |
||||
|
- *merope |
||||
|
- *pleione |
||||
|
- *maia |
||||
|
- *alcyone |
||||
|
- *celaeno |
||||
|
- *electra |
||||
|
pgp: |
||||
|
- *misterio |
||||
@ -0,0 +1,7 @@ |
|||||
|
Copyright (c) 2021 Gabriel Fontes |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
@ -1,2 +1,142 @@ |
|||||
# nix-config |
[](https://builtwithnix.org) |
||||
|
[](https://hydra.m7.rs/jobset/nix-config/main#tabs-jobs) |
||||
|
|
||||
|
# My NixOS configurations |
||||
|
|
||||
|
Here's my NixOS/home-manager config files. Requires [Nix flakes](https://nixos.wiki/wiki/Flakes). |
||||
|
|
||||
|
Looking for something simpler to start out with flakes? Try [my starter config repo](https://github.com/Misterio77/nix-starter-config). |
||||
|
|
||||
|
**Highlights**: |
||||
|
|
||||
|
- Multiple **NixOS configurations**, including **desktop**, **laptop**, **server** |
||||
|
- **Opt-in persistence** through impermanence + blank snapshotting |
||||
|
- **Encrypted** single **BTRFS** partition |
||||
|
- Fully **declarative** **self-hosted** stuff |
||||
|
- Deployment **secrets** using **sops-nix** |
||||
|
- **Mesh networked** hosts with **tailscale** and **headscale** |
||||
|
- Flexible **Home Manager** Configs through **feature flags** |
||||
|
- Extensively configured wayland environments (**sway** and **hyprland**) and editor (**neovim**) |
||||
|
- **Declarative** **themes** and **wallpapers** with **nix-colors** |
||||
|
- **Hydra CI/CD server and binary cache** that uses the **desktops as remote builders** |
||||
|
|
||||
|
## Structure |
||||
|
|
||||
|
- `flake.nix`: Entrypoint for hosts and home configurations. Also exposes a |
||||
|
devshell for boostrapping (`nix develop` or `nix-shell`). |
||||
|
- `lib`: A few lib functions for making my flake cleaner |
||||
|
- `hosts`: NixOS Configurations, accessible via `nixos-rebuild --flake`. |
||||
|
- `common`: Shared configurations consumed by the machine-specific ones. |
||||
|
- `global`: Configurations that are globally applied to all my machines. |
||||
|
- `optional`: Opt-in configurations my machines can use. |
||||
|
- `atlas`: Desktop PC - 32GB RAM, R5 3600x, RX 5700XT | Hyprland |
||||
|
- `pleione`: Lenovo Ideapad 3 - 8GB RAM, R7 5700u | Hyprland |
||||
|
- `maia`: Secondary Desktop PC - 16GB RAM, i5 6600, GTX 970 | Server |
||||
|
- `merope`: Raspberry Pi 4 - 8GB RAM | Server |
||||
|
- `celaeno`: Oracle Could VPS (Ampere) - 24GB RAM & 4vCPUs | Server |
||||
|
- `alcyone`: Vultr VPS - 1GB RAM & 1 vCPU | Server |
||||
|
- `home`: My Home-manager configuration, acessible via `home-manager --flake` |
||||
|
- Each directory here is a "feature" each hm configuration can toggle, thus |
||||
|
customizing my setup for each machine (be it a server, desktop, laptop, |
||||
|
anything really). |
||||
|
- `modules`: A few actual modules (with options) I haven't upstreamed yet. |
||||
|
- `overlay`: Patches and version overrides for some packages. Accessible via |
||||
|
`nix build`. |
||||
|
- `pkgs`: My custom packages. Also accessible via `nix build`. You can compose |
||||
|
these into your own configuration by using my flake's overlay, or consume them through NUR. |
||||
|
- `templates`: A couple project templates for different languages. Accessible |
||||
|
via `nix init`. |
||||
|
|
||||
|
|
||||
|
## About the installation |
||||
|
|
||||
|
All my computers use a single btrfs (encrypted on all except headless systems) |
||||
|
partition, with subvolumes for `/nix`, a `/persist` directory (which I opt in |
||||
|
using `impermanence`), swap file, and a root subvolume (cleared on every boot). |
||||
|
|
||||
|
Home-manager is used in a standalone way, and because of opt-in persistence is |
||||
|
activated on every boot with `loginShellInit`. |
||||
|
|
||||
|
|
||||
|
## How to bootstrap |
||||
|
|
||||
|
All you need is nix (any version). Run: |
||||
|
``` |
||||
|
nix-shell |
||||
|
``` |
||||
|
|
||||
|
If you already have nix 2.4+, git, and have already enabled `flakes` and |
||||
|
`nix-command`, you can also use the non-legacy command: |
||||
|
``` |
||||
|
nix develop |
||||
|
``` |
||||
|
|
||||
|
`nixos-rebuild --flake .` To build system configurations |
||||
|
|
||||
|
`home-manager --flake .` To build user configurations |
||||
|
|
||||
|
`nix build` (or shell or run) To build and use packages |
||||
|
|
||||
|
`sops` To manage secrets |
||||
|
|
||||
|
|
||||
|
## Secrets |
||||
|
|
||||
|
For deployment secrets (such as user passwords and server service secrets), I'm |
||||
|
using the awesome [`sops-nix`](https://github.com/Mic92/sops-nix). All secrets |
||||
|
are encrypted with my personal PGP key (stored on a YubiKey), as well as the |
||||
|
relevant systems's SSH host keys. |
||||
|
|
||||
|
On my desktop and laptop, I use `pass` for managing passwords, which are |
||||
|
encrypted using (you bet) my PGP key. This same key is also used for mail |
||||
|
signing, as well as for SSH'ing around. |
||||
|
|
||||
|
## Tooling and applications I use |
||||
|
|
||||
|
Most relevant user apps daily drivers: |
||||
|
|
||||
|
- hyprland + swayidle + swaylock |
||||
|
- waybar |
||||
|
- neovim |
||||
|
- fish + starship |
||||
|
- kitty |
||||
|
- qutebrowser |
||||
|
- neomutt + mbsync |
||||
|
- khal + khard + todoman + vdirsyncer |
||||
|
- gpg + pass |
||||
|
- tailscale |
||||
|
- podman |
||||
|
- zathura |
||||
|
- wofi |
||||
|
- bat + fd + rg |
||||
|
- kdeconnect |
||||
|
- sublime-music |
||||
|
|
||||
|
Some of the services I host: |
||||
|
|
||||
|
- hydra |
||||
|
- navidrome |
||||
|
- deluge |
||||
|
- prometheus |
||||
|
- websites (such as https://m7.rs) |
||||
|
- minecraft |
||||
|
- headscale |
||||
|
|
||||
|
Nixy stuff: |
||||
|
|
||||
|
- nix-colors |
||||
|
- sops-nix |
||||
|
- impermanence |
||||
|
- home-manager |
||||
|
- deploy-rs |
||||
|
- and NixOS and nix itself, of course :) |
||||
|
|
||||
|
Let me know if you have any questions about them :) |
||||
|
|
||||
|
## Unixpornish stuff |
||||
|
 |
||||
|
 |
||||
|
|
||||
|
That's how my hyprland desktop setup look like (as of 2022 July). |
||||
|
|
||||
|
|
||||
|
|||||
@ -0,0 +1,16 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
export NIX_SSHOPTS="-A" |
||||
|
|
||||
|
build_remote=false |
||||
|
|
||||
|
hosts="$1" |
||||
|
shift |
||||
|
|
||||
|
if [ -z "$hosts" ]; then |
||||
|
echo "No hosts to deploy" |
||||
|
exit 2 |
||||
|
fi |
||||
|
|
||||
|
for host in ${hosts//,/ }; do |
||||
|
nixos-rebuild --flake .\#$host switch --target-host $host --use-remote-sudo --use-substitutes $@ |
||||
|
done |
||||
@ -0,0 +1,744 @@ |
|||||
|
{ |
||||
|
"nodes": { |
||||
|
"base16-schemes": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1680729003, |
||||
|
"narHash": "sha256-M9LHTL24/W4oqgbYRkz0B2qpNrkefTs98pfj3MxIXnU=", |
||||
|
"owner": "tinted-theming", |
||||
|
"repo": "base16-schemes", |
||||
|
"rev": "dc048afa066287a719ddbab62b3e19e4b5110cf0", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "tinted-theming", |
||||
|
"repo": "base16-schemes", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"blobs": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1604995301, |
||||
|
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=", |
||||
|
"owner": "simple-nixos-mailserver", |
||||
|
"repo": "blobs", |
||||
|
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265", |
||||
|
"type": "gitlab" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "simple-nixos-mailserver", |
||||
|
"repo": "blobs", |
||||
|
"type": "gitlab" |
||||
|
} |
||||
|
}, |
||||
|
"composer2nix-src": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1646178110, |
||||
|
"narHash": "sha256-P3acfGwHYjjZQcviPiOT7T7qzzP/drc2mibzrsrNP18=", |
||||
|
"owner": "svanderburg", |
||||
|
"repo": "composer2nix", |
||||
|
"rev": "299caca4aac42d7639a42eb4dde951c010f6e91c", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "svanderburg", |
||||
|
"ref": "v0.0.6", |
||||
|
"repo": "composer2nix", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"disconic": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": "nixpkgs", |
||||
|
"rust-overlay": "rust-overlay" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686712653, |
||||
|
"narHash": "sha256-O/+mtiHxheKg5aMyjfIHOjuImRHQNzt72IUAap+B6uQ=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "disconic", |
||||
|
"rev": "074bc44d4d100f0e8281da3e219537d89c1a92ef", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "disconic", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"firefly": { |
||||
|
"inputs": { |
||||
|
"composer2nix-src": "composer2nix-src", |
||||
|
"firefly-iii-src": "firefly-iii-src", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1685900414, |
||||
|
"narHash": "sha256-liZ0Z4+ifPJxzxCxlcIDIbPuWm1XQmvEuKAPArC9nSI=", |
||||
|
"owner": "timhae", |
||||
|
"repo": "firefly", |
||||
|
"rev": "22e669ad5c23af974117855a3fe6386c3f3148cb", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "timhae", |
||||
|
"repo": "firefly", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"firefly-iii-src": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1681548383, |
||||
|
"narHash": "sha256-ymWotU5wM6nQhsfnyAt+unewJ5D0tJpNK+UedSyfITU=", |
||||
|
"owner": "firefly-iii", |
||||
|
"repo": "firefly-iii", |
||||
|
"rev": "f878af0d3bbfe7b1a51bef758d4e2e9a66118316", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "firefly-iii", |
||||
|
"ref": "v6.0.8", |
||||
|
"repo": "firefly-iii", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"firefox-addons": { |
||||
|
"inputs": { |
||||
|
"flake-utils": "flake-utils_2", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"dir": "pkgs/firefox-addons", |
||||
|
"lastModified": 1686864707, |
||||
|
"narHash": "sha256-A0gSnFrSqwVLBVvs8pEBrlz3bxrhYuIS+CaIOFvTx+g=", |
||||
|
"owner": "rycee", |
||||
|
"repo": "nur-expressions", |
||||
|
"rev": "bb673b0f4466554e82565b3fdb9139c99d9c6df4", |
||||
|
"type": "gitlab" |
||||
|
}, |
||||
|
"original": { |
||||
|
"dir": "pkgs/firefox-addons", |
||||
|
"owner": "rycee", |
||||
|
"repo": "nur-expressions", |
||||
|
"type": "gitlab" |
||||
|
} |
||||
|
}, |
||||
|
"flake-compat": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1673956053, |
||||
|
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-compat_2": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"lastModified": 1668681692, |
||||
|
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"rev": "009399224d5e398d03b22badca40a37ac85412a1", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "edolstra", |
||||
|
"repo": "flake-compat", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils": { |
||||
|
"inputs": { |
||||
|
"systems": "systems" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1681202837, |
||||
|
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "cfacdce06f30d2b68473a46042957675eebb3401", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils_2": { |
||||
|
"locked": { |
||||
|
"lastModified": 1629284811, |
||||
|
"narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"flake-utils_3": { |
||||
|
"inputs": { |
||||
|
"systems": "systems_2" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1681202837, |
||||
|
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "cfacdce06f30d2b68473a46042957675eebb3401", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"hardware": { |
||||
|
"locked": { |
||||
|
"lastModified": 1686838567, |
||||
|
"narHash": "sha256-aqKCUD126dRlVSKV6vWuDCitfjFrZlkwNuvj5LtjRRU=", |
||||
|
"owner": "nixos", |
||||
|
"repo": "nixos-hardware", |
||||
|
"rev": "429f232fe1dc398c5afea19a51aad6931ee0fb89", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nixos", |
||||
|
"repo": "nixos-hardware", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"home-manager": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686922395, |
||||
|
"narHash": "sha256-ysevinohPxdKp0RXyhDRsz1/vh1eXazg4AWp0n5X/U4=", |
||||
|
"owner": "nix-community", |
||||
|
"repo": "home-manager", |
||||
|
"rev": "9ba7b3990eb1f4782ea3f5fe7ac4f3c88dd7a32c", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nix-community", |
||||
|
"repo": "home-manager", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"hyprland": { |
||||
|
"inputs": { |
||||
|
"hyprland-protocols": "hyprland-protocols", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
], |
||||
|
"wlroots": "wlroots", |
||||
|
"xdph": "xdph" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1683130508, |
||||
|
"narHash": "sha256-Npf48UUfywneFYGEc7NQ59xudwvw7EJjwweT4tHguIY=", |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "hyprland", |
||||
|
"rev": "f27873a6f06dc2f87600edb890f3c38298bfb55f", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "hyprwm", |
||||
|
"ref": "v0.25.0", |
||||
|
"repo": "hyprland", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"hyprland-protocols": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": [ |
||||
|
"hyprland", |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1681065697, |
||||
|
"narHash": "sha256-QPzwwlGKX95tl6ZEshboZbEwwAXww6lNLdVYd6T9Mrc=", |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "hyprland-protocols", |
||||
|
"rev": "4d29e48433270a2af06b8bc711ca1fe5109746cd", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "hyprland-protocols", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"hyprwm-contrib": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686925761, |
||||
|
"narHash": "sha256-H+i0VQvc2gx/QUCRNFoLZmHmCDITMQiF9zkDLj0pYCc=", |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "contrib", |
||||
|
"rev": "fd07e8b82042c0d2ca0c492df2b8f4854573c7d0", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "contrib", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"impermanence": { |
||||
|
"locked": { |
||||
|
"lastModified": 1684264534, |
||||
|
"narHash": "sha256-K0zr+ry3FwIo3rN2U/VWAkCJSgBslBisvfRIPwMbuCQ=", |
||||
|
"owner": "nix-community", |
||||
|
"repo": "impermanence", |
||||
|
"rev": "89253fb1518063556edd5e54509c30ac3089d5e6", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nix-community", |
||||
|
"repo": "impermanence", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nix-colors": { |
||||
|
"inputs": { |
||||
|
"base16-schemes": "base16-schemes", |
||||
|
"nixpkgs-lib": "nixpkgs-lib" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1682108218, |
||||
|
"narHash": "sha256-tMr7BbxualFQlN+XopS8rMMgf2XR9ZfRuwIZtjsWmfI=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "nix-colors", |
||||
|
"rev": "b92df8f5eb1fa20d8e09810c03c9dc0d94ef2820", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "nix-colors", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nix-minecraft": { |
||||
|
"inputs": { |
||||
|
"flake-compat": "flake-compat", |
||||
|
"flake-utils": "flake-utils_3", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686877481, |
||||
|
"narHash": "sha256-K1a+QLB++86+G4K47eSP7VQztPghLJYJE2BC30xS25U=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "nix-minecraft", |
||||
|
"rev": "eaceb105010cacbfd65346e753dce9a27d1d32ee", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "nix-minecraft", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixos-mailserver": { |
||||
|
"inputs": { |
||||
|
"blobs": "blobs", |
||||
|
"flake-compat": "flake-compat_2", |
||||
|
"nixpkgs": [ |
||||
|
"nixpkgs" |
||||
|
], |
||||
|
"nixpkgs-22_11": "nixpkgs-22_11", |
||||
|
"utils": "utils" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686468558, |
||||
|
"narHash": "sha256-K69Ojlx3N8I6tRTZsrKFMIqK4yrnJ6/PjfKZi3wchYg=", |
||||
|
"owner": "simple-nixos-mailserver", |
||||
|
"repo": "nixos-mailserver", |
||||
|
"rev": "290d00f6db4e80467013728819ad73dd4a394d9a", |
||||
|
"type": "gitlab" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "simple-nixos-mailserver", |
||||
|
"repo": "nixos-mailserver", |
||||
|
"type": "gitlab" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs": { |
||||
|
"locked": { |
||||
|
"lastModified": 1686331006, |
||||
|
"narHash": "sha256-hElRDWUNG655aqF0awu+h5cmDN+I/dQcChRt2tGuGGU=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "85bcb95aa83be667e562e781e9d186c57a07d757", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "nixos-23.05", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs-22_11": { |
||||
|
"locked": { |
||||
|
"lastModified": 1669558522, |
||||
|
"narHash": "sha256-yqxn+wOiPqe6cxzOo4leeJOp1bXE/fjPEi/3F/bBHv8=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "ce5fe99df1f15a09a91a86be9738d68fadfbad82", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"id": "nixpkgs", |
||||
|
"ref": "nixos-22.11", |
||||
|
"type": "indirect" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs-lib": { |
||||
|
"locked": { |
||||
|
"lastModified": 1680397293, |
||||
|
"narHash": "sha256-wBpJ73+tJ8fZSWb4tzNbAVahC4HSo2QG3nICDy4ExBQ=", |
||||
|
"owner": "nix-community", |
||||
|
"repo": "nixpkgs.lib", |
||||
|
"rev": "b18d328214ca3c627d3cc3f51fd9d1397fdbcd7a", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nix-community", |
||||
|
"repo": "nixpkgs.lib", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs-stable": { |
||||
|
"locked": { |
||||
|
"lastModified": 1686885751, |
||||
|
"narHash": "sha256-KcbYp2KuKbXgNaYVziwKUc6AKRhgJ1G8Qq5gjAbQ3uw=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "aa4b53f79d961a7cbba0b24f791401a34c18011a", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "release-23.05", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_2": { |
||||
|
"locked": { |
||||
|
"lastModified": 1687277670, |
||||
|
"narHash": "sha256-pN5XLJGNz5b/kOjfk2At3aU2+QJa0a2o/cDM6GX686I=", |
||||
|
"owner": "nixos", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "e4d9386f02195182adb9766ede4798e1c8ba8dd9", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nixos", |
||||
|
"ref": "nixos-unstable-small", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_3": { |
||||
|
"locked": { |
||||
|
"lastModified": 1682669017, |
||||
|
"narHash": "sha256-Vi+p4y3wnl0/4gcwTdmCO398kKlDaUrNROtf3GOD2NY=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "7449971a3ecf857b4a554cf79b1d9dcc1a4647d8", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "nixos-22.11", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_4": { |
||||
|
"locked": { |
||||
|
"lastModified": 1686398752, |
||||
|
"narHash": "sha256-nGWNQVhSw4VSL+S0D0cbrNR9vs9Bq7rlYR+1K5f5j6w=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "a30520bf8eabf8a5c37889d661e67a2dbcaa59e6", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "nixpkgs-unstable", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_5": { |
||||
|
"locked": { |
||||
|
"lastModified": 1660842467, |
||||
|
"narHash": "sha256-lSer61lI5X61/3zjMu4OSUqdKSCW2jM1rU6B3WLBOj4=", |
||||
|
"owner": "nixos", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "9b9f4bb4e1125a2b9734b05a4c35ff388cabec05", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nixos", |
||||
|
"ref": "nixos-22.05", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"nixpkgs_6": { |
||||
|
"locked": { |
||||
|
"lastModified": 1670543317, |
||||
|
"narHash": "sha256-4mMR56rtxKr+Gwz399jFr4i76SQZxsLWxxyfQlPXRm0=", |
||||
|
"owner": "NixOS", |
||||
|
"repo": "nixpkgs", |
||||
|
"rev": "7a6a010c3a1d00f8470a5ca888f2f927f1860a19", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "NixOS", |
||||
|
"ref": "nixos-22.11", |
||||
|
"repo": "nixpkgs", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"paste-misterio-me": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": "nixpkgs_3" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1683036512, |
||||
|
"narHash": "sha256-Y+BCLNiuWSGSiPJBT5s4P0CoOhhKUkXTsocTXQ7EPKM=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "paste.misterio.me", |
||||
|
"rev": "16890f98a3de5451accdca919a1c13d393fad84a", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "paste.misterio.me", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"root": { |
||||
|
"inputs": { |
||||
|
"disconic": "disconic", |
||||
|
"firefly": "firefly", |
||||
|
"firefox-addons": "firefox-addons", |
||||
|
"hardware": "hardware", |
||||
|
"home-manager": "home-manager", |
||||
|
"hyprland": "hyprland", |
||||
|
"hyprwm-contrib": "hyprwm-contrib", |
||||
|
"impermanence": "impermanence", |
||||
|
"nix-colors": "nix-colors", |
||||
|
"nix-minecraft": "nix-minecraft", |
||||
|
"nixos-mailserver": "nixos-mailserver", |
||||
|
"nixpkgs": "nixpkgs_2", |
||||
|
"paste-misterio-me": "paste-misterio-me", |
||||
|
"sops-nix": "sops-nix", |
||||
|
"website": "website", |
||||
|
"yrmos": "yrmos" |
||||
|
} |
||||
|
}, |
||||
|
"rust-overlay": { |
||||
|
"inputs": { |
||||
|
"flake-utils": "flake-utils", |
||||
|
"nixpkgs": [ |
||||
|
"disconic", |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686450923, |
||||
|
"narHash": "sha256-a7B9VT2NHJWRCerHmZagAXu3z2QHJKhxUhzjh5vAnXU=", |
||||
|
"owner": "oxalica", |
||||
|
"repo": "rust-overlay", |
||||
|
"rev": "4b3cb15179af3b8d640a29fa85cc9f332b4123e6", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "oxalica", |
||||
|
"repo": "rust-overlay", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"sops-nix": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": "nixpkgs_4", |
||||
|
"nixpkgs-stable": "nixpkgs-stable" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1686902322, |
||||
|
"narHash": "sha256-Vogj2MsipA+Uzr0M3d8300JeKQDHhPy6NEuTQXVdWu0=", |
||||
|
"owner": "mic92", |
||||
|
"repo": "sops-nix", |
||||
|
"rev": "1e2bae54870a06aa9364f8d33a5b9a0869d792fc", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "mic92", |
||||
|
"repo": "sops-nix", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"systems": { |
||||
|
"locked": { |
||||
|
"lastModified": 1681028828, |
||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |
||||
|
"owner": "nix-systems", |
||||
|
"repo": "default", |
||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nix-systems", |
||||
|
"repo": "default", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"systems_2": { |
||||
|
"locked": { |
||||
|
"lastModified": 1681028828, |
||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |
||||
|
"owner": "nix-systems", |
||||
|
"repo": "default", |
||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "nix-systems", |
||||
|
"repo": "default", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"utils": { |
||||
|
"locked": { |
||||
|
"lastModified": 1605370193, |
||||
|
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=", |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"rev": "5021eac20303a61fafe17224c087f5519baed54d", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "numtide", |
||||
|
"repo": "flake-utils", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"website": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": "nixpkgs_5" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1682529315, |
||||
|
"narHash": "sha256-A5dNnW1485QJSNznbyymvzv4j6XOAYrDEQLaskMBly8=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "website", |
||||
|
"rev": "a012b6145b183df2f6ad32e981a281b0f1ebed72", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "website", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"wlroots": { |
||||
|
"flake": false, |
||||
|
"locked": { |
||||
|
"host": "gitlab.freedesktop.org", |
||||
|
"lastModified": 1682436395, |
||||
|
"narHash": "sha256-GGEjkQO9m7YLYIXIXM76HWdhjg4Ye+oafOtyaFAYKI4=", |
||||
|
"owner": "wlroots", |
||||
|
"repo": "wlroots", |
||||
|
"rev": "6830bfc17fd94709e2cdd4da0af989f102a26e59", |
||||
|
"type": "gitlab" |
||||
|
}, |
||||
|
"original": { |
||||
|
"host": "gitlab.freedesktop.org", |
||||
|
"owner": "wlroots", |
||||
|
"repo": "wlroots", |
||||
|
"type": "gitlab" |
||||
|
} |
||||
|
}, |
||||
|
"xdph": { |
||||
|
"inputs": { |
||||
|
"hyprland-protocols": [ |
||||
|
"hyprland", |
||||
|
"hyprland-protocols" |
||||
|
], |
||||
|
"nixpkgs": [ |
||||
|
"hyprland", |
||||
|
"nixpkgs" |
||||
|
] |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1682439384, |
||||
|
"narHash": "sha256-zHDa8LCZs05TZHQSIZ3ucwyMPglBGHcqTBzfkLjYXTM=", |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "xdg-desktop-portal-hyprland", |
||||
|
"rev": "c0e233955568fbea4e859336f6d3d14d51294d7c", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "hyprwm", |
||||
|
"repo": "xdg-desktop-portal-hyprland", |
||||
|
"type": "github" |
||||
|
} |
||||
|
}, |
||||
|
"yrmos": { |
||||
|
"inputs": { |
||||
|
"nixpkgs": "nixpkgs_6" |
||||
|
}, |
||||
|
"locked": { |
||||
|
"lastModified": 1683315051, |
||||
|
"narHash": "sha256-o3ssWypA+3PNRkSYheY6BwqvqCNmYIbk0ILeA2SDvSE=", |
||||
|
"owner": "misterio77", |
||||
|
"repo": "yrmos", |
||||
|
"rev": "b3adf628b172637a0c07eacdcf98028ac76e1787", |
||||
|
"type": "github" |
||||
|
}, |
||||
|
"original": { |
||||
|
"owner": "misterio77", |
||||
|
"repo": "yrmos", |
||||
|
"type": "github" |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
"root": "root", |
||||
|
"version": 7 |
||||
|
} |
||||
@ -0,0 +1,160 @@ |
|||||
|
{ |
||||
|
description = "My NixOS configuration"; |
||||
|
|
||||
|
nixConfig = { |
||||
|
extra-substituters = [ "https://cache.m7.rs" ]; |
||||
|
extra-trusted-public-keys = [ "cache.m7.rs:kszZ/NSwE/TjhOcPPQ16IuUiuRSisdiIwhKZCxguaWg=" ]; |
||||
|
}; |
||||
|
|
||||
|
inputs = { |
||||
|
# Go back to nixos-unstable after PR 238700 is merged |
||||
|
# https://nixpk.gs/pr-tracker.html?pr=238700 |
||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable-small"; |
||||
|
|
||||
|
hardware.url = "github:nixos/nixos-hardware"; |
||||
|
impermanence.url = "github:nix-community/impermanence"; |
||||
|
nix-colors.url = "github:misterio77/nix-colors"; |
||||
|
sops-nix.url = "github:mic92/sops-nix"; |
||||
|
|
||||
|
home-manager = { |
||||
|
url = "github:nix-community/home-manager"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
nixos-mailserver = { |
||||
|
url = "gitlab:simple-nixos-mailserver/nixos-mailserver"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
nix-minecraft = { |
||||
|
url = "github:misterio77/nix-minecraft"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
firefly = { |
||||
|
url = "github:timhae/firefly"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
|
||||
|
hyprland = { |
||||
|
url = "github:hyprwm/hyprland/v0.25.0"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
hyprwm-contrib = { |
||||
|
url = "github:hyprwm/contrib"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
firefox-addons = { |
||||
|
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; |
||||
|
inputs.nixpkgs.follows = "nixpkgs"; |
||||
|
}; |
||||
|
|
||||
|
disconic.url = "github:misterio77/disconic"; |
||||
|
website.url = "github:misterio77/website"; |
||||
|
paste-misterio-me.url = "github:misterio77/paste.misterio.me"; |
||||
|
yrmos.url = "github:misterio77/yrmos"; |
||||
|
}; |
||||
|
|
||||
|
outputs = { self, nixpkgs, home-manager, ... }@inputs: |
||||
|
let |
||||
|
inherit (self) outputs; |
||||
|
lib = nixpkgs.lib // home-manager.lib; |
||||
|
systems = [ "x86_64-linux" "aarch64-linux" ]; |
||||
|
forEachSystem = f: lib.genAttrs systems (sys: f pkgsFor.${sys}); |
||||
|
pkgsFor = nixpkgs.legacyPackages; |
||||
|
in |
||||
|
{ |
||||
|
inherit lib; |
||||
|
nixosModules = import ./modules/nixos; |
||||
|
homeManagerModules = import ./modules/home-manager; |
||||
|
templates = import ./templates; |
||||
|
|
||||
|
overlays = import ./overlays { inherit inputs outputs; }; |
||||
|
hydraJobs = import ./hydra.nix { inherit inputs outputs; }; |
||||
|
|
||||
|
packages = forEachSystem (pkgs: import ./pkgs { inherit pkgs; }); |
||||
|
devShells = forEachSystem (pkgs: import ./shell.nix { inherit pkgs; }); |
||||
|
formatter = forEachSystem (pkgs: pkgs.nixpkgs-fmt); |
||||
|
|
||||
|
wallpapers = import ./home/misterio/wallpapers; |
||||
|
|
||||
|
nixosConfigurations = { |
||||
|
# Main desktop |
||||
|
atlas = lib.nixosSystem { |
||||
|
modules = [ ./hosts/atlas ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Secondary desktop |
||||
|
maia = lib.nixosSystem { |
||||
|
modules = [ ./hosts/maia ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Personal laptop |
||||
|
pleione = lib.nixosSystem { |
||||
|
modules = [ ./hosts/pleione ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Work laptop |
||||
|
electra = lib.nixosSystem { |
||||
|
modules = [ ./hosts/electra ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Core server (Vultr) |
||||
|
alcyone = lib.nixosSystem { |
||||
|
modules = [ ./hosts/alcyone ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Build and game server (Oracle) |
||||
|
celaeno = lib.nixosSystem { |
||||
|
modules = [ ./hosts/celaeno ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
# Media server (RPi) |
||||
|
merope = lib.nixosSystem { |
||||
|
modules = [ ./hosts/merope ]; |
||||
|
specialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
homeConfigurations = { |
||||
|
# Desktops |
||||
|
"misterio@atlas" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/atlas.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@maia" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/maia.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@pleione" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/pleione.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@electra" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/electra.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@alcyone" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/alcyone.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@merope" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/merope.nix ]; |
||||
|
pkgs = pkgsFor.aarch64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@celaeno" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/celaeno.nix ]; |
||||
|
pkgs = pkgsFor.aarch64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
"misterio@generic" = lib.homeManagerConfiguration { |
||||
|
modules = [ ./home/misterio/generic.nix ]; |
||||
|
pkgs = pkgsFor.x86_64-linux; |
||||
|
extraSpecialArgs = { inherit inputs outputs; }; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,4 @@ |
|||||
|
{ inputs, ... }: { |
||||
|
imports = [ ./global ]; |
||||
|
colorscheme = inputs.nix-colors.colorSchemes.paraiso; |
||||
|
} |
||||
@ -0,0 +1,44 @@ |
|||||
|
{ inputs, ... }: { |
||||
|
imports = [ |
||||
|
./global |
||||
|
./features/desktop/hyprland |
||||
|
./features/rgb |
||||
|
./features/productivity |
||||
|
./features/pass |
||||
|
./features/games |
||||
|
./features/music |
||||
|
]; |
||||
|
|
||||
|
colorscheme = inputs.nix-colors.colorSchemes.catppuccin-macchiato; |
||||
|
|
||||
|
# ------ ----- ------ |
||||
|
# | DP-3 | | DP-1| | DP-2 | |
||||
|
# ------ ----- ------ |
||||
|
monitors = [ |
||||
|
{ |
||||
|
name = "DP-3"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
noBar = true; |
||||
|
x = 0; |
||||
|
workspace = "3"; |
||||
|
enabled = false; |
||||
|
} |
||||
|
{ |
||||
|
name = "DP-1"; |
||||
|
width = 2560; |
||||
|
height = 1080; |
||||
|
refreshRate = 75; |
||||
|
x = 1920; |
||||
|
workspace = "1"; |
||||
|
} |
||||
|
{ |
||||
|
name = "DP-2"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
noBar = true; |
||||
|
x = 4480; |
||||
|
workspace = "2"; |
||||
|
} |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,4 @@ |
|||||
|
{ inputs, ... }: { |
||||
|
imports = [ ./global ]; |
||||
|
colorscheme = inputs.nix-colors.colorSchemes.dracula; |
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
{ inputs, outputs, ... }: |
||||
|
{ |
||||
|
imports = [ |
||||
|
./global |
||||
|
./features/desktop/wireless |
||||
|
./features/desktop/hyprland |
||||
|
./features/pass |
||||
|
]; |
||||
|
|
||||
|
wallpaper = outputs.wallpapers.aenami-wait; |
||||
|
colorscheme = inputs.nix-colors.colorSchemes.silk-dark; |
||||
|
|
||||
|
monitors = [ |
||||
|
{ |
||||
|
name = "eDP-1"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
workspace = "3"; |
||||
|
x = 0; |
||||
|
} |
||||
|
{ |
||||
|
name = "DP-2"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
workspace = "1"; |
||||
|
x = 1920; |
||||
|
} |
||||
|
{ |
||||
|
name = "HDMI-A-1"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
workspace = "2"; |
||||
|
x = 3840; |
||||
|
} |
||||
|
]; |
||||
|
|
||||
|
# programs.git.userEmail = "gabriel@zoocha.com"; |
||||
|
} |
||||
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
programs.bash = { |
||||
|
enable = true; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
{ |
||||
|
programs.bat = { |
||||
|
enable = true; |
||||
|
config.theme = "base16"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
imports = [ |
||||
|
./bash.nix |
||||
|
./bat.nix |
||||
|
./direnv.nix |
||||
|
./fish.nix |
||||
|
./gh.nix |
||||
|
./git.nix |
||||
|
./gpg.nix |
||||
|
./nix-index.nix |
||||
|
./pfetch.nix |
||||
|
./ranger.nix |
||||
|
./screen.nix |
||||
|
./shellcolor.nix |
||||
|
./ssh.nix |
||||
|
./starship.nix |
||||
|
./xpo.nix |
||||
|
]; |
||||
|
home.packages = with pkgs; [ |
||||
|
comma # Install and run programs by sticking a , before them |
||||
|
distrobox # Nice escape hatch, integrates docker images with my environment |
||||
|
|
||||
|
bc # Calculator |
||||
|
bottom # System viewer |
||||
|
ncdu # TUI disk usage |
||||
|
exa # Better ls |
||||
|
ripgrep # Better grep |
||||
|
fd # Better find |
||||
|
httpie # Better curl |
||||
|
diffsitter # Better diff |
||||
|
jq # JSON pretty printer and manipulator |
||||
|
trekscii # Cute startrek cli printer |
||||
|
|
||||
|
nil # Nix LSP |
||||
|
nixfmt # Nix formatter |
||||
|
|
||||
|
ltex-ls # Spell checking LSP |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
{ |
||||
|
programs.direnv = { |
||||
|
enable = true; |
||||
|
nix-direnv.enable = true; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,122 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
let |
||||
|
inherit (lib) mkIf; |
||||
|
hasPackage = pname: lib.any (p: p ? pname && p.pname == pname) config.home.packages; |
||||
|
hasRipgrep = hasPackage "ripgrep"; |
||||
|
hasExa = hasPackage "exa"; |
||||
|
hasNeovim = config.programs.neovim.enable; |
||||
|
hasEmacs = config.programs.emacs.enable; |
||||
|
hasNeomutt = config.programs.neomutt.enable; |
||||
|
hasShellColor = config.programs.shellcolor.enable; |
||||
|
hasKitty = config.programs.kitty.enable; |
||||
|
shellcolor = "${pkgs.shellcolord}/bin/shellcolor"; |
||||
|
in |
||||
|
{ |
||||
|
programs.fish = { |
||||
|
enable = true; |
||||
|
shellAbbrs = rec { |
||||
|
jqless = "jq -C | less -r"; |
||||
|
|
||||
|
n = "nix"; |
||||
|
nd = "nix develop -c $SHELL"; |
||||
|
ns = "nix shell"; |
||||
|
nsn = "nix shell nixpkgs#"; |
||||
|
nb = "nix build"; |
||||
|
nbn = "nix build nixpkgs#"; |
||||
|
nf = "nix flake"; |
||||
|
|
||||
|
nr = "nixos-rebuild --flake ."; |
||||
|
nrs = "nixos-rebuild --flake . switch"; |
||||
|
snr = "sudo nixos-rebuild --flake ."; |
||||
|
snrs = "sudo nixos-rebuild --flake . switch"; |
||||
|
hm = "home-manager --flake ."; |
||||
|
hms = "home-manager --flake . switch"; |
||||
|
|
||||
|
ls = mkIf hasExa "exa"; |
||||
|
|
||||
|
e = mkIf hasEmacs "emacsclient -t"; |
||||
|
|
||||
|
vrg = mkIf (hasNeomutt && hasRipgrep) "nvimrg"; |
||||
|
vim = mkIf hasNeovim "nvim"; |
||||
|
vi = vim; |
||||
|
v = vim; |
||||
|
|
||||
|
mutt = mkIf hasNeomutt "neomutt"; |
||||
|
m = mutt; |
||||
|
|
||||
|
cik = mkIf hasKitty "clone-in-kitty --type os-window"; |
||||
|
ck = cik; |
||||
|
}; |
||||
|
shellAliases = { |
||||
|
# Clear screen and scrollback |
||||
|
clear = "printf '\\033[2J\\033[3J\\033[1;1H'"; |
||||
|
}; |
||||
|
functions = { |
||||
|
# Disable greeting |
||||
|
fish_greeting = ""; |
||||
|
# Grep using ripgrep and pass to nvim |
||||
|
nvimrg = mkIf (hasNeomutt && hasRipgrep) "nvim -q (rg --vimgrep $argv | psub)"; |
||||
|
# Integrate ssh with shellcolord |
||||
|
ssh = mkIf hasShellColor '' |
||||
|
${shellcolor} disable $fish_pid |
||||
|
# Check if kitty is available |
||||
|
if set -q KITTY_PID && set -q KITTY_WINDOW_ID && type -q -f kitty |
||||
|
kitty +kitten ssh $argv |
||||
|
else |
||||
|
command ssh $argv |
||||
|
end |
||||
|
${shellcolor} enable $fish_pid |
||||
|
${shellcolor} apply $fish_pid |
||||
|
''; |
||||
|
}; |
||||
|
interactiveShellInit = |
||||
|
# Open command buffer in vim when alt+e is pressed |
||||
|
'' |
||||
|
bind \ee edit_command_buffer |
||||
|
'' + |
||||
|
# kitty integration |
||||
|
'' |
||||
|
set --global KITTY_INSTALLATION_DIR "${pkgs.kitty}/lib/kitty" |
||||
|
set --global KITTY_SHELL_INTEGRATION enabled |
||||
|
source "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_conf.d/kitty-shell-integration.fish" |
||||
|
set --prepend fish_complete_path "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_completions.d" |
||||
|
'' + |
||||
|
# Use vim bindings and cursors |
||||
|
'' |
||||
|
fish_vi_key_bindings |
||||
|
set fish_cursor_default block blink |
||||
|
set fish_cursor_insert line blink |
||||
|
set fish_cursor_replace_one underscore blink |
||||
|
set fish_cursor_visual block |
||||
|
'' + |
||||
|
# Use terminal colors |
||||
|
'' |
||||
|
set -U fish_color_autosuggestion brblack |
||||
|
set -U fish_color_cancel -r |
||||
|
set -U fish_color_command brgreen |
||||
|
set -U fish_color_comment brmagenta |
||||
|
set -U fish_color_cwd green |
||||
|
set -U fish_color_cwd_root red |
||||
|
set -U fish_color_end brmagenta |
||||
|
set -U fish_color_error brred |
||||
|
set -U fish_color_escape brcyan |
||||
|
set -U fish_color_history_current --bold |
||||
|
set -U fish_color_host normal |
||||
|
set -U fish_color_match --background=brblue |
||||
|
set -U fish_color_normal normal |
||||
|
set -U fish_color_operator cyan |
||||
|
set -U fish_color_param brblue |
||||
|
set -U fish_color_quote yellow |
||||
|
set -U fish_color_redirection bryellow |
||||
|
set -U fish_color_search_match 'bryellow' '--background=brblack' |
||||
|
set -U fish_color_selection 'white' '--bold' '--background=brblack' |
||||
|
set -U fish_color_status red |
||||
|
set -U fish_color_user brgreen |
||||
|
set -U fish_color_valid_path --underline |
||||
|
set -U fish_pager_color_completion normal |
||||
|
set -U fish_pager_color_description yellow |
||||
|
set -U fish_pager_color_prefix 'white' '--bold' '--underline' |
||||
|
set -U fish_pager_color_progress 'brwhite' '--background=cyan' |
||||
|
''; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
programs.gh = { |
||||
|
enable = true; |
||||
|
extensions = with pkgs; [ gh-markdown-preview ]; |
||||
|
settings = { |
||||
|
git_protocol = "ssh"; |
||||
|
prompt = "enabled"; |
||||
|
}; |
||||
|
}; |
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".config/gh" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
let |
||||
|
ssh = "${pkgs.openssh}/bin/ssh"; |
||||
|
|
||||
|
git-m7 = pkgs.writeShellScriptBin "git-m7" '' |
||||
|
repo="$(git remote -v | grep git@m7.rs | head -1 | cut -d ':' -f2 | cut -d ' ' -f1)" |
||||
|
# Add a .git suffix if it's missing |
||||
|
if [[ "$repo" != *".git" ]]; then |
||||
|
repo="$repo.git" |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" == "init" ]; then |
||||
|
if [ "$2" == "" ]; then |
||||
|
echo "You must specify a name for the repo" |
||||
|
exit 1 |
||||
|
fi |
||||
|
${ssh} -A git@m7.rs << EOF |
||||
|
git init --bare "$2.git" |
||||
|
git -C "$2.git" branch -m main |
||||
|
EOF |
||||
|
git remote add origin git@m7.rs:"$2.git" |
||||
|
elif [ "$1" == "ls" ]; then |
||||
|
${ssh} -A git@m7.rs ls |
||||
|
else |
||||
|
${ssh} -A git@m7.rs git -C "/srv/git/$repo" $@ |
||||
|
fi |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = [ git-m7 ]; |
||||
|
programs.git = { |
||||
|
enable = true; |
||||
|
package = pkgs.gitAndTools.gitFull; |
||||
|
aliases = { |
||||
|
pushall = "!git remote | xargs -L1 git push --all"; |
||||
|
graph = "log --decorate --oneline --graph"; |
||||
|
add-nowhitespace = "!git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -"; |
||||
|
}; |
||||
|
userName = "Gabriel Fontes"; |
||||
|
userEmail = "hi@m7.rs"; |
||||
|
extraConfig = { |
||||
|
feature.manyFiles = true; |
||||
|
init.defaultBranch = "main"; |
||||
|
user.signing.key = "CE707A2C17FAAC97907FF8EF2E54EA7BFE630916"; |
||||
|
commit.gpgSign = true; |
||||
|
gpg.program = "${config.programs.gpg.package}/bin/gpg2"; |
||||
|
}; |
||||
|
lfs.enable = true; |
||||
|
ignores = [ ".direnv" "result" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
|
||||
|
let |
||||
|
ssh = "${pkgs.openssh}/bin/ssh"; |
||||
|
gpg-connect-agent = "${pkgs.gnupg}/bin/gpg-connect-agent"; |
||||
|
in |
||||
|
{ |
||||
|
isUnlocked = "${pkgs.procps}/bin/pgrep 'gpg-agent' &> /dev/null && ${gpg-connect-agent} 'scd getinfo card_list' /bye | ${pkgs.gnugrep}/bin/grep SERIALNO -q"; |
||||
|
unlock = "${ssh} -T localhost -o StrictHostKeyChecking=no exit"; |
||||
|
} |
||||
@ -0,0 +1,66 @@ |
|||||
|
{ pkgs, config, lib, ... }: |
||||
|
let |
||||
|
pinentry = |
||||
|
if config.gtk.enable then { |
||||
|
packages = [ pkgs.pinentry-gnome pkgs.gcr ]; |
||||
|
name = "gnome3"; |
||||
|
} else { |
||||
|
packages = [ pkgs.pinentry-curses ]; |
||||
|
name = "curses"; |
||||
|
}; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = pinentry.packages; |
||||
|
|
||||
|
services.gpg-agent = { |
||||
|
enable = true; |
||||
|
enableSshSupport = true; |
||||
|
sshKeys = [ "149F16412997785363112F3DBD713BC91D51B831" ]; |
||||
|
pinentryFlavor = pinentry.name; |
||||
|
enableExtraSocket = true; |
||||
|
}; |
||||
|
|
||||
|
programs = |
||||
|
let |
||||
|
fixGpg = '' |
||||
|
gpgconf --launch gpg-agent |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
# Start gpg-agent if it's not running or tunneled in |
||||
|
# SSH does not start it automatically, so this is needed to avoid having to use a gpg command at startup |
||||
|
# https://www.gnupg.org/faq/whats-new-in-2.1.html#autostart |
||||
|
bash.profileExtra = fixGpg; |
||||
|
fish.loginShellInit = fixGpg; |
||||
|
zsh.loginExtra = fixGpg; |
||||
|
|
||||
|
gpg = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
trust-model = "tofu+pgp"; |
||||
|
}; |
||||
|
publicKeys = [{ |
||||
|
source = ../../pgp.asc; |
||||
|
trust = 5; |
||||
|
}]; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
systemd.user.services = { |
||||
|
# Link /run/user/$UID/gnupg to ~/.gnupg-sockets |
||||
|
# So that SSH config does not have to know the UID |
||||
|
link-gnupg-sockets = { |
||||
|
Unit = { |
||||
|
Description = "link gnupg sockets from /run to /home"; |
||||
|
}; |
||||
|
Service = { |
||||
|
Type = "oneshot"; |
||||
|
ExecStart = "${pkgs.coreutils}/bin/ln -Tfs /run/user/%U/gnupg %h/.gnupg-sockets"; |
||||
|
ExecStop = "${pkgs.coreutils}/bin/rm $HOME/.gnupg-sockets"; |
||||
|
RemainAfterExit = true; |
||||
|
}; |
||||
|
Install.WantedBy = [ "default.target" ]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
|
# vim: filetype=nix |
||||
@ -0,0 +1,35 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
let |
||||
|
update-script = pkgs.writeShellApplication { |
||||
|
name = "fetch-nix-index-database"; |
||||
|
runtimeInputs = with pkgs; [ wget coreutils ]; |
||||
|
text = '' |
||||
|
filename="index-x86_64-linux" |
||||
|
mkdir -p ~/.cache/nix-index |
||||
|
cd ~/.cache/nix-index |
||||
|
wget -N "https://github.com/Mic92/nix-index-database/releases/latest/download/$filename" |
||||
|
ln -f "$filename" files |
||||
|
''; |
||||
|
}; |
||||
|
in |
||||
|
{ |
||||
|
programs.nix-index.enable = true; |
||||
|
|
||||
|
systemd.user.services.nix-index-database-sync = { |
||||
|
Unit = { Description = "fetch mic92/nix-index-database"; }; |
||||
|
Service = { |
||||
|
Type = "oneshot"; |
||||
|
ExecStart = "${update-script}/bin/fetch-nix-index-database"; |
||||
|
Restart = "on-failure"; |
||||
|
RestartSec = "5m"; |
||||
|
}; |
||||
|
}; |
||||
|
systemd.user.timers.nix-index-database-sync = { |
||||
|
Unit = { Description = "Automatic github:mic92/nix-index-database fetching"; }; |
||||
|
Timer = { |
||||
|
OnBootSec = "10m"; |
||||
|
OnUnitActiveSec = "24h"; |
||||
|
}; |
||||
|
Install = { WantedBy = [ "timers.target" ]; }; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
home = { |
||||
|
packages = with pkgs; [ pfetch ]; |
||||
|
sessionVariables.PF_INFO = |
||||
|
"ascii title os kernel uptime shell term desktop scheme palette"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ ranger ]; |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = [ pkgs.screen ]; |
||||
|
home.file.".screenrc".text = '' |
||||
|
startup_message off |
||||
|
defbce on |
||||
|
setenv TERM xterm-256color |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,25 @@ |
|||||
|
{ config, ... }: |
||||
|
let inherit (config.colorscheme) colors; |
||||
|
in { |
||||
|
programs.shellcolor = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
base00 = "${colors.base00}"; |
||||
|
base01 = "${colors.base01}"; |
||||
|
base02 = "${colors.base02}"; |
||||
|
base03 = "${colors.base03}"; |
||||
|
base04 = "${colors.base04}"; |
||||
|
base05 = "${colors.base05}"; |
||||
|
base06 = "${colors.base06}"; |
||||
|
base07 = "${colors.base07}"; |
||||
|
base08 = "${colors.base08}"; |
||||
|
base09 = "${colors.base09}"; |
||||
|
base0A = "${colors.base0A}"; |
||||
|
base0B = "${colors.base0B}"; |
||||
|
base0C = "${colors.base0C}"; |
||||
|
base0D = "${colors.base0D}"; |
||||
|
base0E = "${colors.base0E}"; |
||||
|
base0F = "${colors.base0F}"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
{ outputs, lib, ... }: |
||||
|
let |
||||
|
hostnames = builtins.attrNames outputs.nixosConfigurations; |
||||
|
in |
||||
|
{ |
||||
|
programs.ssh = { |
||||
|
enable = true; |
||||
|
matchBlocks = { |
||||
|
net = { |
||||
|
host = builtins.concatStringsSep " " hostnames; |
||||
|
forwardAgent = true; |
||||
|
remoteForwards = [{ |
||||
|
bind.address = ''/%d/.gnupg-sockets/S.gpg-agent''; |
||||
|
host.address = ''/%d/.gnupg-sockets/S.gpg-agent.extra''; |
||||
|
}]; |
||||
|
}; |
||||
|
trusted = lib.hm.dag.entryBefore [ "net" ] { |
||||
|
host = "m7.rs *.m7.rs *.ts.m7.rs"; |
||||
|
forwardAgent = true; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".ssh" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,133 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
let |
||||
|
nix-inspect = pkgs.writeShellScriptBin "nix-inspect" '' |
||||
|
read -ra EXCLUDED <<< "$@" |
||||
|
EXCLUDED+=(''${NIX_INSPECT_EXCLUDE[@]:-}) |
||||
|
|
||||
|
IFS=":" read -ra PATHS <<< "$PATH" |
||||
|
|
||||
|
read -ra PROGRAMS <<< \ |
||||
|
"$(printf "%s\n" "''${PATHS[@]}" | ${pkgs.gnugrep}/bin/grep "\/nix\/store" | ${pkgs.gnugrep}/bin/grep -v "\-man" | ${pkgs.perl}/bin/perl -pe 's/^\/nix\/store\/\w{32}-([^\/]*)\/bin$/\1/' | ${pkgs.findutils}/bin/xargs)" |
||||
|
|
||||
|
for to_remove in "''${EXCLUDED[@]}"; do |
||||
|
to_remove_full="$(printf "%s\n" "''${PROGRAMS[@]}" | grep "$to_remove" )" |
||||
|
PROGRAMS=("''${PROGRAMS[@]/$to_remove_full}") |
||||
|
done |
||||
|
|
||||
|
read -ra PROGRAMS <<< "''${PROGRAMS[@]}" |
||||
|
echo "''${PROGRAMS[@]}" |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
programs.starship = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
format = |
||||
|
let |
||||
|
git = "$git_branch$git_commit$git_state$git_status"; |
||||
|
cloud = "$aws$gcloud$openstack"; |
||||
|
in |
||||
|
'' |
||||
|
$username$hostname($shlvl)($cmd_duration) $fill ($nix_shell)$custom |
||||
|
$directory(${git})(- ${cloud}) $fill $time |
||||
|
$jobs$character |
||||
|
''; |
||||
|
|
||||
|
fill = { |
||||
|
symbol = " "; |
||||
|
disabled = false; |
||||
|
}; |
||||
|
|
||||
|
# Core |
||||
|
username = { |
||||
|
format = "[$user]($style)"; |
||||
|
show_always = true; |
||||
|
}; |
||||
|
hostname = { |
||||
|
format = "[@$hostname]($style) "; |
||||
|
ssh_only = false; |
||||
|
style = "bold green"; |
||||
|
}; |
||||
|
shlvl = { |
||||
|
format = "[$shlvl]($style) "; |
||||
|
style = "bold cyan"; |
||||
|
threshold = 2; |
||||
|
repeat = true; |
||||
|
disabled = false; |
||||
|
}; |
||||
|
cmd_duration = { |
||||
|
format = "took [$duration]($style) "; |
||||
|
}; |
||||
|
|
||||
|
directory = { |
||||
|
format = "[$path]($style)( [$read_only]($read_only_style)) "; |
||||
|
}; |
||||
|
nix_shell = { |
||||
|
format = "[($name \\(develop\\) <- )$symbol]($style) "; |
||||
|
impure_msg = ""; |
||||
|
symbol = " "; |
||||
|
style = "bold red"; |
||||
|
}; |
||||
|
custom = { |
||||
|
nix_inspect = { |
||||
|
disabled = false; |
||||
|
when = "test -z $IN_NIX_SHELL"; |
||||
|
command = "${nix-inspect}/bin/nix-inspect kitty imagemagick ncurses user-environment"; |
||||
|
format = "[($output <- )$symbol]($style) "; |
||||
|
symbol = " "; |
||||
|
style = "bold blue"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
character = { |
||||
|
error_symbol = "[~~>](bold red)"; |
||||
|
success_symbol = "[->>](bold green)"; |
||||
|
vimcmd_symbol = "[<<-](bold yellow)"; |
||||
|
vimcmd_visual_symbol = "[<<-](bold cyan)"; |
||||
|
vimcmd_replace_symbol = "[<<-](bold purple)"; |
||||
|
vimcmd_replace_one_symbol = "[<<-](bold purple)"; |
||||
|
}; |
||||
|
|
||||
|
time = { |
||||
|
format = "\\\[[$time]($style)\\\]"; |
||||
|
disabled = false; |
||||
|
}; |
||||
|
|
||||
|
# Cloud |
||||
|
gcloud = { |
||||
|
format = "on [$symbol$active(/$project)(\\($region\\))]($style)"; |
||||
|
}; |
||||
|
aws = { |
||||
|
format = "on [$symbol$profile(\\($region\\))]($style)"; |
||||
|
}; |
||||
|
|
||||
|
# Icon changes only \/ |
||||
|
aws.symbol = " "; |
||||
|
conda.symbol = " "; |
||||
|
dart.symbol = " "; |
||||
|
directory.read_only = " "; |
||||
|
docker_context.symbol = " "; |
||||
|
elixir.symbol = " "; |
||||
|
elm.symbol = " "; |
||||
|
gcloud.symbol = " "; |
||||
|
git_branch.symbol = " "; |
||||
|
golang.symbol = " "; |
||||
|
hg_branch.symbol = " "; |
||||
|
java.symbol = " "; |
||||
|
julia.symbol = " "; |
||||
|
memory_usage.symbol = " "; |
||||
|
nim.symbol = " "; |
||||
|
nodejs.symbol = " "; |
||||
|
package.symbol = " "; |
||||
|
perl.symbol = " "; |
||||
|
php.symbol = " "; |
||||
|
python.symbol = " "; |
||||
|
ruby.symbol = " "; |
||||
|
rust.symbol = " "; |
||||
|
scala.symbol = " "; |
||||
|
shlvl.symbol = ""; |
||||
|
swift.symbol = " "; |
||||
|
terraform.symbol = ""; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
{ |
||||
|
programs.xpo = { |
||||
|
enable = true; |
||||
|
defaultServer = "m7.rs"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,21 @@ |
|||||
|
{ pkgs, lib, outputs, ... }: |
||||
|
{ |
||||
|
imports = [ |
||||
|
./deluge.nix |
||||
|
./discord.nix |
||||
|
./dragon.nix |
||||
|
./firefox.nix |
||||
|
./font.nix |
||||
|
./gtk.nix |
||||
|
./kdeconnect.nix |
||||
|
./pavucontrol.nix |
||||
|
./playerctl.nix |
||||
|
./qt.nix |
||||
|
./sublime-music.nix |
||||
|
]; |
||||
|
|
||||
|
xdg.mimeApps.enable = true; |
||||
|
home.packages = with pkgs; [ |
||||
|
xdg-utils-spawn-terminal |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ deluge ]; |
||||
|
} |
||||
@ -0,0 +1,221 @@ |
|||||
|
{ config, pkgs, lib, ... }: |
||||
|
|
||||
|
let inherit (config.colorscheme) colors; |
||||
|
in { |
||||
|
home.packages = with pkgs; [ discord discocss ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".config/discord" ]; |
||||
|
}; |
||||
|
|
||||
|
xdg.configFile."discocss/custom.css".text = '' |
||||
|
.theme-dark { |
||||
|
--header-primary: #${colors.base05}; |
||||
|
--header-secondary: #${colors.base04}; |
||||
|
--text-normal: #${colors.base05}; |
||||
|
--text-muted: #${colors.base04}; |
||||
|
--text-link: #${colors.base08}; |
||||
|
--channels-default: #${colors.base05}; |
||||
|
--interactive-normal: #${colors.base04}; |
||||
|
--interactive-hover: #${colors.base05}; |
||||
|
--interactive-active: #${colors.base05}; |
||||
|
--interactive-muted: #${colors.base03}; |
||||
|
--background-primary: #${colors.base00}; |
||||
|
--background-secondary: #${colors.base01}; |
||||
|
--background-secondary-alt: #${colors.base02}; |
||||
|
--background-tertiary: #${colors.base01}; |
||||
|
--background-accent: #${colors.base01}; |
||||
|
--background-floating: #${colors.base00}; |
||||
|
--background-mobile-primary: var(--background-primary); |
||||
|
--background-mobile-secondary: var(--background-secondary); |
||||
|
--background-modifier-selected: var(--background-secondary); |
||||
|
--scrollbar-thin-thumb: #${colors.base02}; |
||||
|
--scrollbar-auto-thumb: #${colors.base02}; |
||||
|
--scrollbar-auto-track: #${colors.base01}; |
||||
|
--scrollbar-auto-scrollbar-color-thumb: #${colors.base02}; |
||||
|
--scrollbar-auto-scrollbar-color-track: #${colors.base01}; |
||||
|
--focus-primary: #${colors.base08}; |
||||
|
--channeltextarea-background: #${colors.base01}; |
||||
|
--deprecated-card-bg: #${colors.base01}; |
||||
|
--deprecated-quickswitcher-input-background: #${colors.base01}; |
||||
|
--deprecated-quickswitcher-input-placeholder: #${colors.base05}; |
||||
|
--background-modifier-hover: var(--background-secondary); |
||||
|
--background-modifier-active: var(--background-secondary-alt); |
||||
|
--activity-card-background: var(--background-secondary); |
||||
|
} |
||||
|
body { |
||||
|
font-family: ${config.fontProfiles.regular.family}, sans serif; |
||||
|
} |
||||
|
.scroller-1Bvpku { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.scroller-2FKFPG { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.headerPlaying-j0WQBV, .headerStreaming-2FjmGz { |
||||
|
background: var(--background-secondary-alt); |
||||
|
} |
||||
|
.theme-dark .headerNormal-T_seeN { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .body-3iLsc4, .theme-dark .footer-1fjuF6 { |
||||
|
background-color: var(--background-primary); |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.theme-dark .quickMessage-1yeL4E { |
||||
|
background-color: var(--background-secondary); |
||||
|
border-color: var(--background-secondary); |
||||
|
} |
||||
|
.theme-dark .inset-3sAvek { |
||||
|
background-color: var(--background-secondary); |
||||
|
} |
||||
|
.theme-dark .userSettingsAccount-2eMFVR .viewBody-2Qz-jg { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .modal-yWgWj- { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .footer-2gL1pp { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .lookLink-9FtZy-.colorPrimary-3b3xI6 { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .notDetected-33MY4s, .theme-light .notDetected-33MY4s { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .notDetected-33MY4s .gameName-1RiWHm, .theme-light .notDetected-33MY4s .gameName-1RiWHm { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .gameName-1RiWHm { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .notDetected-33MY4s .lastPlayed-3bQ7Bo, .theme-light .notDetected-33MY4s .lastPlayed-3bQ7Bo { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .nowPlayingAdd-1Kdmh_, .theme-light .nowPlayingAdd-1Kdmh_ { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.css-1k00wn6-singleValue { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .codeRedemptionRedirect-1wVR4b { |
||||
|
color: var(--header-primary); |
||||
|
background-color: var(--background-primary); |
||||
|
border-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .emptyStateHeader-248f_b { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .emptyStateSubtext-2hdA9c { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .root-1gCeng { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.theme-dark .date-EErlv4 { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .content-8bidB ol, .theme-dark .content-8biNdB p, .theme-dark .content-8biNdB ul li { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.headerName-fajvi9, .headerTagUsernameNoNickname-2_H881 { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.headerTag-2pZJzA { |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.theme-dark .activityProfile-2bJRaP .headerText-1HLrL7, .theme-dark .activityUserPopout-2yItg2 .headerText-1HLrL7, .theme-light .activityProfile-2bJRaP .headerText-1HLrL7, .theme-light .activityUserPopout-2yItg2 .headerText-1HLrL7 { |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.activityName-1IaRLn, .nameNormal-2lqVQK, .nameWrap-3Z4G_9 { |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.theme-dark .activityProfile-2bJRaP .content-3JfFJh, .theme-dark .activityProfile-2bJRaP .details-38sfDr, .theme-dark .activityProfile-2bJRaP .name-29ETJS, .theme-dark .activityUserPopout-2yItg2 .content-3JfFJh, .theme-dark .activityUserPopout-2yItg2 .details-38sfDr, .theme-dark .activityUserPopout-2yItg2 .name-29ETJS, .theme-light .activityProfile-2bJRaP .content-3JfFJh, .theme-light .activityProfile-2bJRaP .details-38sfDr, .theme-light .activityProfile-2bJRaP .name-29ETJS, .theme-light .activityUserPopout-2yItg2 .content-3JfFJh, .theme-light .activityUserPopout-2yItg2 .details-38sfDr, .theme-light .activityUserPopout-2yItg2 .name-29ETJS { |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.topSectionPlaying-1J5E4n { |
||||
|
background: var(--background-secondary-alt); |
||||
|
} |
||||
|
.username-3gJmXY { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.discriminator-xUhQkU { |
||||
|
color: var(--header-secondary); |
||||
|
} |
||||
|
.tabBarItem-1b8RUP.item-PXvHYJ { |
||||
|
color: var(--header-secondary) !important; |
||||
|
border-color: transparent !important; |
||||
|
} |
||||
|
.theme-dark .keybind-KpFkfr { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.theme-dark .closeButton-1tv5uR { |
||||
|
border-color: var(--header-primary); |
||||
|
} |
||||
|
.barFill-23-gu- { |
||||
|
background: var(--text-link); |
||||
|
} |
||||
|
.focused-3afm-j { |
||||
|
background-color: var(--background-secondary) !important; |
||||
|
color: var(--text-link) !important; |
||||
|
} |
||||
|
.colorDefault-2K3EoJ .checkbox-3s5GYZ, .colorDefault-2K3EoJ .radioSelection-1HmrQS { |
||||
|
color: var(--text-link); |
||||
|
} |
||||
|
.colorDefault-2K3EoJ .checkbox-3s5GYZ { |
||||
|
color: var(--text-link); |
||||
|
} |
||||
|
.colorDefault-2K3EoJ .check-1JyqgN { |
||||
|
color: var(--background-primary); |
||||
|
} |
||||
|
.colorDefault-2K3EoJ.focused-3afm-j .checkbox-3s5GYZ { |
||||
|
color: var(--background-primary) !important; |
||||
|
} |
||||
|
.colorDefault-2K3EoJ.focused-3afm-j .check-1JyqgN { |
||||
|
color: var(--text-link); |
||||
|
} |
||||
|
.wrapper-1BJsBx.selected-bZ3Lue .childWrapper-anI2G9, .wrapper-1BJsBx:hover .childWrapper-anI2G9 { |
||||
|
color: var(--background-primary); |
||||
|
background-color: var(--header-secondary); |
||||
|
} |
||||
|
.panels-j1Uci_ { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.navButton-2gQCx- { |
||||
|
color: var(--interactive-normal); |
||||
|
} |
||||
|
.navButtonActive-1MkytQ { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.input-3Xdcic { |
||||
|
color: var(--header-primary); |
||||
|
} |
||||
|
.clickable-2ap7je .header-2o-2hj { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
.peopleColumn-29fq28 { |
||||
|
background-color: var(--background-tertiary); |
||||
|
} |
||||
|
.theme-dark .outer-1AjyKL.active-1xchHY, .theme-dark .outer-1AjyKL.interactive-3B9GmY:hover { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
|
||||
|
.theme-dark .popout-38lTFE { |
||||
|
background-color: var(--background-primary); |
||||
|
} |
||||
|
|
||||
|
.theme-dark .scrollerThemed-2oenus.themedWithTrack-q8E3vB>.scroller-2FKFPG::-webkit-scrollbar-track-piece { |
||||
|
background-color: var(--background-primary); |
||||
|
border: 4px solid var(--background-secondary); |
||||
|
} |
||||
|
|
||||
|
.theme-dark .scrollerThemed-2oenus.themedWithTrack-q8E3vB>.scroller-2FKFPG::-webkit-scrollbar-thumb { |
||||
|
background-color: var(--background-secondary); |
||||
|
border-color: var(--background-secondary); |
||||
|
} |
||||
|
.theme-dark .header-sJd8D7 { |
||||
|
color: var(--text-normal) |
||||
|
} |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ xdragon ]; |
||||
|
} |
||||
@ -0,0 +1,48 @@ |
|||||
|
{ pkgs, lib, inputs, ... }: |
||||
|
|
||||
|
let |
||||
|
addons = inputs.firefox-addons.packages.${pkgs.system}; |
||||
|
in |
||||
|
{ |
||||
|
programs.browserpass.enable = true; |
||||
|
programs.firefox = { |
||||
|
enable = true; |
||||
|
profiles.misterio = { |
||||
|
bookmarks = { }; |
||||
|
extensions = with addons; [ |
||||
|
ublock-origin |
||||
|
browserpass |
||||
|
]; |
||||
|
bookmarks = { }; |
||||
|
settings = { |
||||
|
"browser.disableResetPrompt" = true; |
||||
|
"browser.download.panel.shown" = true; |
||||
|
"browser.download.useDownloadDir" = false; |
||||
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false; |
||||
|
"browser.shell.checkDefaultBrowser" = false; |
||||
|
"browser.shell.defaultBrowserCheckCount" = 1; |
||||
|
"browser.startup.homepage" = "https://start.duckduckgo.com"; |
||||
|
"browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container","downloads-button","library-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","widget-overflow-fixed-list"],"currentVersion":18,"newElementCount":4}''; |
||||
|
"dom.security.https_only_mode" = true; |
||||
|
"identity.fxaccounts.enabled" = false; |
||||
|
"privacy.trackingprotection.enabled" = true; |
||||
|
"signon.rememberSignons" = false; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
home = { |
||||
|
sessionVariables.BROWSER = "firefox"; |
||||
|
persistence = { |
||||
|
# Not persisting is safer |
||||
|
# "/persist/home/misterio".directories = [ ".mozilla/firefox" ]; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
xdg.mimeApps.defaultApplications = { |
||||
|
"text/html" = [ "firefox.desktop" ]; |
||||
|
"text/xml" = [ "firefox.desktop" ]; |
||||
|
"x-scheme-handler/http" = [ "firefox.desktop" ]; |
||||
|
"x-scheme-handler/https" = [ "firefox.desktop" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
fontProfiles = { |
||||
|
enable = true; |
||||
|
monospace = { |
||||
|
family = "FiraCode Nerd Font"; |
||||
|
package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; }; |
||||
|
}; |
||||
|
regular = { |
||||
|
family = "Fira Sans"; |
||||
|
package = pkgs.fira; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,30 @@ |
|||||
|
{ config, pkgs, inputs, ... }: |
||||
|
|
||||
|
let |
||||
|
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) gtkThemeFromScheme; |
||||
|
in |
||||
|
rec { |
||||
|
gtk = { |
||||
|
enable = true; |
||||
|
font = { |
||||
|
name = config.fontProfiles.regular.family; |
||||
|
size = 12; |
||||
|
}; |
||||
|
theme = { |
||||
|
name = "${config.colorscheme.slug}"; |
||||
|
package = gtkThemeFromScheme { scheme = config.colorscheme; }; |
||||
|
}; |
||||
|
iconTheme = { |
||||
|
name = "Papirus"; |
||||
|
package = pkgs.papirus-icon-theme; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
services.xsettingsd = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
"Net/ThemeName" = "${gtk.theme.name}"; |
||||
|
"Net/IconThemeName" = "${gtk.iconTheme.name}"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
{ pkgs, lib, ... }: |
||||
|
|
||||
|
let |
||||
|
|
||||
|
kdeconnect-cli = "${pkgs.plasma5Packages.kdeconnect-kde}/bin/kdeconnect-cli"; |
||||
|
fortune = "${pkgs.fortune}/bin/fortune"; |
||||
|
|
||||
|
script-fortune = pkgs.writeShellScriptBin "fortune" '' |
||||
|
${kdeconnect-cli} -d $(${kdeconnect-cli} --list-available --id-only) --ping-msg "$(${fortune})" |
||||
|
''; |
||||
|
|
||||
|
in |
||||
|
{ |
||||
|
# Hide all .desktop, except for org.kde.kdeconnect.settings |
||||
|
xdg.desktopEntries = { |
||||
|
"org.kde.kdeconnect.sms" = { |
||||
|
exec = ""; |
||||
|
name = "KDE Connect SMS"; |
||||
|
settings.NoDisplay = "true"; |
||||
|
}; |
||||
|
"org.kde.kdeconnect.nonplasma" = { |
||||
|
exec = ""; |
||||
|
name = "KDE Connect Indicator"; |
||||
|
settings.NoDisplay = "true"; |
||||
|
}; |
||||
|
"org.kde.kdeconnect.app" = { |
||||
|
exec = ""; |
||||
|
name = "KDE Connect"; |
||||
|
settings.NoDisplay = "true"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
services.kdeconnect = { |
||||
|
enable = true; |
||||
|
indicator = true; |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
xdg.configFile = { |
||||
|
"kdeconnect-scripts/fortune.sh".source = "${script-fortune}/bin/fortune"; |
||||
|
}; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".config/kdeconnect" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ pavucontrol ]; |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
home.packages = with pkgs; [ playerctl ]; |
||||
|
services.playerctld = { |
||||
|
enable = true; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
qt = { |
||||
|
enable = true; |
||||
|
platformTheme = "gtk"; |
||||
|
style = { |
||||
|
name = "gtk2"; |
||||
|
package = pkgs.libsForQt5.qtstyleplugins; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
{ pkgs, lib, ... }: { |
||||
|
home.packages = [ pkgs.sublime-music ]; |
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".config/sublime-music" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
imports = [ |
||||
|
./hyprland-vnc.nix |
||||
|
./gammastep.nix |
||||
|
./kitty.nix |
||||
|
./mako.nix |
||||
|
./swayidle.nix |
||||
|
./swaylock.nix |
||||
|
./waybar.nix |
||||
|
./wofi.nix |
||||
|
./zathura.nix |
||||
|
]; |
||||
|
|
||||
|
home.packages = with pkgs; [ |
||||
|
grim |
||||
|
imv |
||||
|
mimeo |
||||
|
primary-xwayland |
||||
|
pulseaudio |
||||
|
slurp |
||||
|
waypipe |
||||
|
wf-recorder |
||||
|
wl-clipboard |
||||
|
wl-mirror |
||||
|
wl-mirror-pick |
||||
|
ydotool |
||||
|
]; |
||||
|
|
||||
|
home.sessionVariables = { |
||||
|
MOZ_ENABLE_WAYLAND = 1; |
||||
|
QT_QPA_PLATFORM = "wayland"; |
||||
|
LIBSEAT_BACKEND = "logind"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
{ |
||||
|
services.gammastep = { |
||||
|
enable = true; |
||||
|
provider = "geoclue2"; |
||||
|
temperature = { |
||||
|
day = 6000; |
||||
|
night = 4600; |
||||
|
}; |
||||
|
settings = { |
||||
|
general.adjustment-method = "wayland"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
let |
||||
|
enabledMonitors = lib.filter (m: m.enabled) config.monitors; |
||||
|
# A nice VNC script for remotes running hyprland |
||||
|
vncsh = pkgs.writeShellScriptBin "vnc.sh" '' |
||||
|
ssh $1 bash <<'EOF' |
||||
|
pgrep "wayvnc" && exit |
||||
|
export HYPRLAND_INSTANCE_SIGNATURE="$(ls /tmp/hypr/ -lt | head -2 | tail -1 | rev | cut -d ' ' -f1 | rev)" |
||||
|
export WAYLAND_DISPLAY="wayland-1" |
||||
|
ip="$(ip addr show dev tailscale0 | grep 'inet ' | xargs | cut -d ' ' -f2 | cut -d '/' -f1)" |
||||
|
xpos="$(hyprctl monitors -j | jq -r 'sort_by(.x)[-1] | .x + .width')" |
||||
|
|
||||
|
${lib.concatLines (lib.forEach enabledMonitors (m: '' |
||||
|
hyprctl output create headless |
||||
|
monitor="$(hyprctl monitors -j | jq -r 'map(.name)[-1]')" |
||||
|
hyprctl keyword monitor $monitor,${toString m.width}x${toString m.height}@${toString m.refreshRate},$(($xpos + ${toString m.x}))x${toString m.y},1 |
||||
|
screen -d -m wayvnc -k br -S /tmp/vnc-${m.workspace} -f 60 -o $monitor $ip 590${m.workspace} |
||||
|
sudo iptables -I INPUT -j ACCEPT -p tcp --dport 590${m.workspace} |
||||
|
''))} |
||||
|
EOF |
||||
|
|
||||
|
${lib.concatLines (lib.forEach enabledMonitors (m: '' |
||||
|
vncviewer $1::590${m.workspace} & |
||||
|
''))} |
||||
|
|
||||
|
wait |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = with pkgs; [ |
||||
|
vncsh |
||||
|
wayvnc |
||||
|
tigervnc |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,66 @@ |
|||||
|
{ config, pkgs, ... }: |
||||
|
|
||||
|
let |
||||
|
inherit (config.colorscheme) colors; |
||||
|
kitty-xterm = pkgs.writeShellScriptBin "xterm" '' |
||||
|
${config.programs.kitty.package}/bin/kitty -1 "$@" |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
home = { |
||||
|
packages = [ kitty-xterm ]; |
||||
|
sessionVariables = { |
||||
|
TERMINAL = "kitty -1"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
programs.kitty = { |
||||
|
enable = true; |
||||
|
font = { |
||||
|
name = config.fontProfiles.monospace.family; |
||||
|
size = 12; |
||||
|
}; |
||||
|
settings = { |
||||
|
shell_integration = "no-rc"; # I prefer to do it manually |
||||
|
scrollback_lines = 4000; |
||||
|
scrollback_pager_history_size = 2048; |
||||
|
window_padding_width = 15; |
||||
|
foreground = "#${colors.base05}"; |
||||
|
background = "#${colors.base00}"; |
||||
|
selection_background = "#${colors.base05}"; |
||||
|
selection_foreground = "#${colors.base00}"; |
||||
|
url_color = "#${colors.base04}"; |
||||
|
cursor = "#${colors.base05}"; |
||||
|
active_border_color = "#${colors.base03}"; |
||||
|
inactive_border_color = "#${colors.base01}"; |
||||
|
active_tab_background = "#${colors.base00}"; |
||||
|
active_tab_foreground = "#${colors.base05}"; |
||||
|
inactive_tab_background = "#${colors.base01}"; |
||||
|
inactive_tab_foreground = "#${colors.base04}"; |
||||
|
tab_bar_background = "#${colors.base01}"; |
||||
|
color0 = "#${colors.base00}"; |
||||
|
color1 = "#${colors.base08}"; |
||||
|
color2 = "#${colors.base0B}"; |
||||
|
color3 = "#${colors.base0A}"; |
||||
|
color4 = "#${colors.base0D}"; |
||||
|
color5 = "#${colors.base0E}"; |
||||
|
color6 = "#${colors.base0C}"; |
||||
|
color7 = "#${colors.base05}"; |
||||
|
color8 = "#${colors.base03}"; |
||||
|
color9 = "#${colors.base08}"; |
||||
|
color10 = "#${colors.base0B}"; |
||||
|
color11 = "#${colors.base0A}"; |
||||
|
color12 = "#${colors.base0D}"; |
||||
|
color13 = "#${colors.base0E}"; |
||||
|
color14 = "#${colors.base0C}"; |
||||
|
color15 = "#${colors.base07}"; |
||||
|
color16 = "#${colors.base09}"; |
||||
|
color17 = "#${colors.base0F}"; |
||||
|
color18 = "#${colors.base01}"; |
||||
|
color19 = "#${colors.base02}"; |
||||
|
color20 = "#${colors.base04}"; |
||||
|
color21 = "#${colors.base06}"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,22 @@ |
|||||
|
{ config, ... }: |
||||
|
let inherit (config.colorscheme) colors kind; |
||||
|
in { |
||||
|
programs.mako = { |
||||
|
enable = true; |
||||
|
iconPath = |
||||
|
if kind == "dark" then |
||||
|
"${config.gtk.iconTheme.package}/share/icons/Papirus-Dark" |
||||
|
else |
||||
|
"${config.gtk.iconTheme.package}/share/icons/Papirus-Light"; |
||||
|
font = "${config.fontProfiles.regular.family} 12"; |
||||
|
padding = "10,20"; |
||||
|
anchor = "top-center"; |
||||
|
width = 400; |
||||
|
height = 150; |
||||
|
borderSize = 2; |
||||
|
defaultTimeout = 12000; |
||||
|
backgroundColor = "#${colors.base00}dd"; |
||||
|
borderColor = "#${colors.base03}dd"; |
||||
|
textColor = "#${colors.base05}dd"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
|
||||
|
let |
||||
|
swaylock = "${config.programs.swaylock.package}/bin/swaylock"; |
||||
|
pactl = "${pkgs.pulseaudio}/bin/pactl"; |
||||
|
pgrep = "${pkgs.procps}/bin/pgrep"; |
||||
|
|
||||
|
isLocked = "${pgrep} -x ${swaylock}"; |
||||
|
actionLock = "${swaylock} -S --daemonize"; |
||||
|
|
||||
|
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min) |
||||
|
|
||||
|
mkEvent = time: start: resume: '' |
||||
|
timeout ${toString (lockTime + time)} '${start}' ${lib.optionalString (resume != null) "resume '${resume}'"} |
||||
|
timeout ${toString time} '${isLocked} && ${start}' ${lib.optionalString (resume != null) "resume '${isLocked} && ${resume}'"} |
||||
|
''; |
||||
|
in |
||||
|
{ |
||||
|
xdg.configFile."swayidle/config".text = '' |
||||
|
timeout ${toString lockTime} '${actionLock}' |
||||
|
'' + |
||||
|
# After 10 seconds of locked, mute mic |
||||
|
(mkEvent 10 "${pactl} set-source-mute @DEFAULT_SOURCE@ yes" "${pactl} set-source-mute @DEFAULT_SOURCE@ no") + |
||||
|
# If has RGB, turn it off 20 seconds after locked |
||||
|
lib.optionalString config.services.rgbdaemon.enable |
||||
|
(mkEvent 20 "systemctl --user stop rgbdaemon" "systemctl --user start rgbdaemon") + |
||||
|
# Hyprland - Turn off screen (DPMS) |
||||
|
lib.optionalString config.wayland.windowManager.hyprland.enable |
||||
|
(let hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl"; |
||||
|
in mkEvent 40 "${hyprctl} dispatch dpms off" "${hyprctl} dispatch dpms on") + |
||||
|
# Sway - Turn off screen (DPMS) |
||||
|
lib.optionalString config.wayland.windowManager.sway.enable |
||||
|
(let swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg"; |
||||
|
in mkEvent 40 "${swaymsg} 'output * dpms off'" "${swaymsg} 'output * dpms on'"); |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
{ config, pkgs, ... }: |
||||
|
|
||||
|
let inherit (config.colorscheme) colors; |
||||
|
in |
||||
|
{ |
||||
|
programs.swaylock = { |
||||
|
enable = true; |
||||
|
package = pkgs.swaylock-effects; |
||||
|
settings = { |
||||
|
effect-blur = "20x3"; |
||||
|
fade-in = 0.1; |
||||
|
|
||||
|
font = config.fontProfiles.regular.family; |
||||
|
font-size = 15; |
||||
|
|
||||
|
line-uses-inside = true; |
||||
|
disable-caps-lock-text = true; |
||||
|
indicator-caps-lock = true; |
||||
|
indicator-radius = 40; |
||||
|
indicator-idle-visible = true; |
||||
|
indicator-y-position = 1000; |
||||
|
|
||||
|
ring-color = "#${colors.base02}"; |
||||
|
inside-wrong-color = "#${colors.base08}"; |
||||
|
ring-wrong-color = "#${colors.base08}"; |
||||
|
key-hl-color = "#${colors.base0B}"; |
||||
|
bs-hl-color = "#${colors.base08}"; |
||||
|
ring-ver-color = "#${colors.base09}"; |
||||
|
inside-ver-color = "#${colors.base09}"; |
||||
|
inside-color = "#${colors.base01}"; |
||||
|
text-color = "#${colors.base07}"; |
||||
|
text-clear-color = "#${colors.base01}"; |
||||
|
text-ver-color = "#${colors.base01}"; |
||||
|
text-wrong-color = "#${colors.base01}"; |
||||
|
text-caps-lock-color = "#${colors.base07}"; |
||||
|
inside-clear-color = "#${colors.base0C}"; |
||||
|
ring-clear-color = "#${colors.base0C}"; |
||||
|
inside-caps-lock-color = "#${colors.base09}"; |
||||
|
ring-caps-lock-color = "#${colors.base02}"; |
||||
|
separator-color = "#${colors.base02}"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,425 @@ |
|||||
|
{ outputs, config, lib, pkgs, ... }: |
||||
|
|
||||
|
let |
||||
|
# Dependencies |
||||
|
jq = "${pkgs.jq}/bin/jq"; |
||||
|
xml = "${pkgs.xmlstarlet}/bin/xml"; |
||||
|
gamemoded = "${pkgs.gamemode}/bin/gamemoded"; |
||||
|
systemctl = "${pkgs.systemd}/bin/systemctl"; |
||||
|
journalctl = "${pkgs.systemd}/bin/journalctl"; |
||||
|
playerctl = "${pkgs.playerctl}/bin/playerctl"; |
||||
|
playerctld = "${pkgs.playerctl}/bin/playerctld"; |
||||
|
neomutt = "${pkgs.neomutt}/bin/neomutt"; |
||||
|
pavucontrol = "${pkgs.pavucontrol}/bin/pavucontrol"; |
||||
|
btm = "${pkgs.bottom}/bin/btm"; |
||||
|
wofi = "${pkgs.wofi}/bin/wofi"; |
||||
|
ikhal = "${pkgs.khal}/bin/ikhal"; |
||||
|
|
||||
|
terminal = "${pkgs.kitty}/bin/kitty"; |
||||
|
terminal-spawn = cmd: "${terminal} $SHELL -i -c ${cmd}"; |
||||
|
|
||||
|
calendar = terminal-spawn ikhal; |
||||
|
systemMonitor = terminal-spawn btm; |
||||
|
mail = terminal-spawn neomutt; |
||||
|
|
||||
|
# Function to simplify making waybar outputs |
||||
|
jsonOutput = name: { pre ? "", text ? "", tooltip ? "", alt ? "", class ? "", percentage ? "" }: "${pkgs.writeShellScriptBin "waybar-${name}" '' |
||||
|
set -euo pipefail |
||||
|
${pre} |
||||
|
${jq} -cn \ |
||||
|
--arg text "${text}" \ |
||||
|
--arg tooltip "${tooltip}" \ |
||||
|
--arg alt "${alt}" \ |
||||
|
--arg class "${class}" \ |
||||
|
--arg percentage "${percentage}" \ |
||||
|
'{text:$text,tooltip:$tooltip,alt:$alt,class:$class,percentage:$percentage}' |
||||
|
''}/bin/waybar-${name}"; |
||||
|
in |
||||
|
{ |
||||
|
programs.waybar = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
|
||||
|
secondary = { |
||||
|
mode = "dock"; |
||||
|
layer = "top"; |
||||
|
height = 32; |
||||
|
width = 100; |
||||
|
margin = "6"; |
||||
|
position = "bottom"; |
||||
|
modules-center = (lib.optionals config.wayland.windowManager.sway.enable [ |
||||
|
"sway/workspaces" |
||||
|
"sway/mode" |
||||
|
]) ++ (lib.optionals config.wayland.windowManager.hyprland.enable [ |
||||
|
"wlr/workspaces" |
||||
|
]); |
||||
|
|
||||
|
"wlr/workspaces" = { |
||||
|
on-click = "activate"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
primary = { |
||||
|
mode = "dock"; |
||||
|
layer = "top"; |
||||
|
height = 40; |
||||
|
margin = "6"; |
||||
|
position = "top"; |
||||
|
output = builtins.map (m: m.name) (builtins.filter (m: ! m.noBar) config.monitors); |
||||
|
modules-left = [ |
||||
|
"custom/menu" |
||||
|
"custom/currentplayer" |
||||
|
"custom/player" |
||||
|
]; |
||||
|
modules-center = [ |
||||
|
"cpu" |
||||
|
"custom/gpu" |
||||
|
"memory" |
||||
|
"clock" |
||||
|
"pulseaudio" |
||||
|
"custom/unread-mail" |
||||
|
"custom/gammastep" |
||||
|
"custom/gpg-agent" |
||||
|
]; |
||||
|
modules-right = [ |
||||
|
"custom/gamemode" |
||||
|
"network" |
||||
|
"custom/tailscale-ping" |
||||
|
"battery" |
||||
|
"tray" |
||||
|
"custom/hostname" |
||||
|
]; |
||||
|
|
||||
|
clock = { |
||||
|
format = "{:%d/%m %H:%M}"; |
||||
|
tooltip-format = '' |
||||
|
<big>{:%Y %B}</big> |
||||
|
<tt><small>{calendar}</small></tt>''; |
||||
|
on-click = calendar; |
||||
|
}; |
||||
|
cpu = { |
||||
|
format = " {usage}%"; |
||||
|
on-click = systemMonitor; |
||||
|
}; |
||||
|
"custom/gpu" = { |
||||
|
interval = 5; |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "gpu" { |
||||
|
text = "$(cat /sys/class/drm/card0/device/gpu_busy_percent)"; |
||||
|
tooltip = "GPU Usage"; |
||||
|
}; |
||||
|
format = " {}%"; |
||||
|
on-click = systemMonitor; |
||||
|
}; |
||||
|
memory = { |
||||
|
format = " {}%"; |
||||
|
interval = 5; |
||||
|
on-click = systemMonitor; |
||||
|
}; |
||||
|
pulseaudio = { |
||||
|
format = "{icon} {volume}%"; |
||||
|
format-muted = " 0%"; |
||||
|
format-icons = { |
||||
|
headphone = ""; |
||||
|
headset = ""; |
||||
|
portable = ""; |
||||
|
default = [ "" "" "" ]; |
||||
|
}; |
||||
|
on-click = pavucontrol; |
||||
|
}; |
||||
|
idle_inhibitor = { |
||||
|
format = "{icon}"; |
||||
|
format-icons = { |
||||
|
activated = ""; |
||||
|
deactivated = ""; |
||||
|
}; |
||||
|
}; |
||||
|
battery = { |
||||
|
bat = "BAT0"; |
||||
|
interval = 10; |
||||
|
format-icons = [ "" "" "" "" "" "" "" "" "" "" ]; |
||||
|
format = "{icon} {capacity}%"; |
||||
|
format-charging = " {capacity}%"; |
||||
|
onclick = ""; |
||||
|
}; |
||||
|
"sway/window" = { |
||||
|
max-length = 20; |
||||
|
}; |
||||
|
network = { |
||||
|
interval = 3; |
||||
|
format-wifi = " {essid}"; |
||||
|
format-ethernet = " Connected"; |
||||
|
format-disconnected = ""; |
||||
|
tooltip-format = '' |
||||
|
{ifname} |
||||
|
{ipaddr}/{cidr} |
||||
|
Up: {bandwidthUpBits} |
||||
|
Down: {bandwidthDownBits}''; |
||||
|
on-click = ""; |
||||
|
}; |
||||
|
"custom/tailscale-ping" = { |
||||
|
interval = 2; |
||||
|
return-type = "json"; |
||||
|
exec = |
||||
|
let |
||||
|
inherit (builtins) concatStringsSep attrNames; |
||||
|
hosts = attrNames outputs.nixosConfigurations; |
||||
|
homeMachine = "merope"; |
||||
|
remoteMachine = "alcyone"; |
||||
|
in |
||||
|
jsonOutput "tailscale-ping" { |
||||
|
# Build variables for each host |
||||
|
pre = '' |
||||
|
set -o pipefail |
||||
|
${concatStringsSep "\n" (map (host: '' |
||||
|
ping_${host}="$(timeout 2 ping -c 1 -q ${host} 2>/dev/null | tail -1 | cut -d '/' -f5 | cut -d '.' -f1)ms" || ping_${host}="Disconnected" |
||||
|
'') hosts)} |
||||
|
''; |
||||
|
# Access a remote machine's and a home machine's ping |
||||
|
text = " $ping_${remoteMachine} / $ping_${homeMachine}"; |
||||
|
# Show pings from all machines |
||||
|
tooltip = concatStringsSep "\n" (map (host: "${host}: $ping_${host}") hosts); |
||||
|
}; |
||||
|
format = "{}"; |
||||
|
on-click = ""; |
||||
|
}; |
||||
|
"custom/menu" = { |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "menu" { |
||||
|
text = ""; |
||||
|
tooltip = ''$(cat /etc/os-release | grep PRETTY_NAME | cut -d '"' -f2)''; |
||||
|
}; |
||||
|
on-click = "${wofi} -S drun -x 10 -y 10 -W 25% -H 60%"; |
||||
|
}; |
||||
|
"custom/hostname" = { |
||||
|
exec = "echo $USER@$(hostname)"; |
||||
|
on-click = terminal; |
||||
|
}; |
||||
|
"custom/unread-mail" = { |
||||
|
interval = 5; |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "unread-mail" { |
||||
|
pre = '' |
||||
|
count=$(find ~/Mail/*/Inbox/new -type f | wc -l) |
||||
|
if [ "$count" == "0" ]; then |
||||
|
subjects="No new mail" |
||||
|
status="read" |
||||
|
else |
||||
|
subjects=$(\ |
||||
|
grep -h "Subject: " -r ~/Mail/*/Inbox/new | cut -d ':' -f2- | \ |
||||
|
perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | ${xml} esc | sed -e 's/^/\-/'\ |
||||
|
) |
||||
|
status="unread" |
||||
|
fi |
||||
|
if pgrep mbsync &>/dev/null; then |
||||
|
status="syncing" |
||||
|
fi |
||||
|
''; |
||||
|
text = "$count"; |
||||
|
tooltip = "$subjects"; |
||||
|
alt = "$status"; |
||||
|
}; |
||||
|
format = "{icon} ({})"; |
||||
|
format-icons = { |
||||
|
"read" = ""; |
||||
|
"unread" = ""; |
||||
|
"syncing" = ""; |
||||
|
}; |
||||
|
on-click = mail; |
||||
|
}; |
||||
|
"custom/gpg-agent" = { |
||||
|
interval = 2; |
||||
|
return-type = "json"; |
||||
|
exec = |
||||
|
let gpgCmds = import ../../../cli/gpg-commands.nix { inherit pkgs; }; |
||||
|
in |
||||
|
jsonOutput "gpg-agent" { |
||||
|
pre = ''status=$(${gpgCmds.isUnlocked} && echo "unlocked" || echo "locked")''; |
||||
|
alt = "$status"; |
||||
|
tooltip = "GPG is $status"; |
||||
|
}; |
||||
|
format = "{icon}"; |
||||
|
format-icons = { |
||||
|
"locked" = ""; |
||||
|
"unlocked" = ""; |
||||
|
}; |
||||
|
on-click = ""; |
||||
|
}; |
||||
|
"custom/gamemode" = { |
||||
|
exec-if = "${gamemoded} --status | grep 'is active' -q"; |
||||
|
interval = 2; |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "gamemode" { |
||||
|
tooltip = "Gamemode is active"; |
||||
|
}; |
||||
|
format = " "; |
||||
|
}; |
||||
|
"custom/gammastep" = { |
||||
|
interval = 5; |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "gammastep" { |
||||
|
pre = '' |
||||
|
if unit_status="$(${systemctl} --user is-active gammastep)"; then |
||||
|
status="$unit_status ($(${journalctl} --user -u gammastep.service -g 'Period: ' | tail -1 | cut -d ':' -f6 | xargs))" |
||||
|
else |
||||
|
status="$unit_status" |
||||
|
fi |
||||
|
''; |
||||
|
alt = "\${status:-inactive}"; |
||||
|
tooltip = "Gammastep is $status"; |
||||
|
}; |
||||
|
format = "{icon}"; |
||||
|
format-icons = { |
||||
|
"activating" = " "; |
||||
|
"deactivating" = " "; |
||||
|
"inactive" = "? "; |
||||
|
"active (Night)" = " "; |
||||
|
"active (Nighttime)" = " "; |
||||
|
"active (Transition (Night)" = " "; |
||||
|
"active (Transition (Nighttime)" = " "; |
||||
|
"active (Day)" = " "; |
||||
|
"active (Daytime)" = " "; |
||||
|
"active (Transition (Day)" = " "; |
||||
|
"active (Transition (Daytime)" = " "; |
||||
|
}; |
||||
|
on-click = "${systemctl} --user is-active gammastep && ${systemctl} --user stop gammastep || ${systemctl} --user start gammastep"; |
||||
|
}; |
||||
|
"custom/currentplayer" = { |
||||
|
interval = 2; |
||||
|
return-type = "json"; |
||||
|
exec = jsonOutput "currentplayer" { |
||||
|
pre = '' |
||||
|
player="$(${playerctl} status -f "{{playerName}}" 2>/dev/null || echo "No player active" | cut -d '.' -f1)" |
||||
|
count="$(${playerctl} -l | wc -l)" |
||||
|
if ((count > 1)); then |
||||
|
more=" +$((count - 1))" |
||||
|
else |
||||
|
more="" |
||||
|
fi |
||||
|
''; |
||||
|
alt = "$player"; |
||||
|
tooltip = "$player ($count available)"; |
||||
|
text = "$more"; |
||||
|
}; |
||||
|
format = "{icon}{}"; |
||||
|
format-icons = { |
||||
|
"No player active" = " "; |
||||
|
"Celluloid" = " "; |
||||
|
"spotify" = " "; |
||||
|
"ncspot" = " "; |
||||
|
"qutebrowser" = ""; |
||||
|
"firefox" = " "; |
||||
|
"discord" = " "; |
||||
|
"sublimemusic" = " "; |
||||
|
"kdeconnect" = " "; |
||||
|
}; |
||||
|
on-click = "${playerctld} shift"; |
||||
|
on-click-right = "${playerctld} unshift"; |
||||
|
}; |
||||
|
"custom/player" = { |
||||
|
exec-if = "${playerctl} status"; |
||||
|
exec = ''${playerctl} metadata --format '{"text": "{{artist}} - {{title}}", "alt": "{{status}}", "tooltip": "{{title}} ({{artist}} - {{album}})"}' ''; |
||||
|
return-type = "json"; |
||||
|
interval = 2; |
||||
|
max-length = 30; |
||||
|
format = "{icon} {}"; |
||||
|
format-icons = { |
||||
|
"Playing" = ""; |
||||
|
"Paused" = " "; |
||||
|
"Stopped" = ""; |
||||
|
}; |
||||
|
on-click = "${playerctl} play-pause"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
}; |
||||
|
# Cheatsheet: |
||||
|
# x -> all sides |
||||
|
# x y -> vertical, horizontal |
||||
|
# x y z -> top, horizontal, bottom |
||||
|
# w x y z -> top, right, bottom, left |
||||
|
style = let inherit (config.colorscheme) colors; in /* css */ '' |
||||
|
* { |
||||
|
font-family: ${config.fontProfiles.regular.family}, ${config.fontProfiles.monospace.family}; |
||||
|
font-size: 12pt; |
||||
|
padding: 0 8px; |
||||
|
} |
||||
|
|
||||
|
.modules-right { |
||||
|
margin-right: -15px; |
||||
|
} |
||||
|
|
||||
|
.modules-left { |
||||
|
margin-left: -15px; |
||||
|
} |
||||
|
|
||||
|
window#waybar.top { |
||||
|
opacity: 0.95; |
||||
|
padding: 0; |
||||
|
background-color: #${colors.base00}; |
||||
|
border: 2px solid #${colors.base0C}; |
||||
|
border-radius: 10px; |
||||
|
} |
||||
|
window#waybar.bottom { |
||||
|
opacity: 0.90; |
||||
|
background-color: #${colors.base00}; |
||||
|
border: 2px solid #${colors.base0C}; |
||||
|
border-radius: 10px; |
||||
|
} |
||||
|
|
||||
|
window#waybar { |
||||
|
color: #${colors.base05}; |
||||
|
} |
||||
|
|
||||
|
#workspaces button { |
||||
|
background-color: #${colors.base01}; |
||||
|
color: #${colors.base05}; |
||||
|
margin: 4px; |
||||
|
} |
||||
|
#workspaces button.hidden { |
||||
|
background-color: #${colors.base00}; |
||||
|
color: #${colors.base04}; |
||||
|
} |
||||
|
#workspaces button.focused, |
||||
|
#workspaces button.active { |
||||
|
background-color: #${colors.base0A}; |
||||
|
color: #${colors.base00}; |
||||
|
} |
||||
|
|
||||
|
#clock { |
||||
|
background-color: #${colors.base0C}; |
||||
|
color: #${colors.base00}; |
||||
|
padding-left: 15px; |
||||
|
padding-right: 15px; |
||||
|
margin-top: 0; |
||||
|
margin-bottom: 0; |
||||
|
border-radius: 10px; |
||||
|
} |
||||
|
|
||||
|
#custom-menu { |
||||
|
background-color: #${colors.base0C}; |
||||
|
color: #${colors.base00}; |
||||
|
padding-left: 15px; |
||||
|
padding-right: 22px; |
||||
|
margin-left: 0; |
||||
|
margin-right: 10px; |
||||
|
margin-top: 0; |
||||
|
margin-bottom: 0; |
||||
|
border-radius: 10px; |
||||
|
} |
||||
|
#custom-hostname { |
||||
|
background-color: #${colors.base0C}; |
||||
|
color: #${colors.base00}; |
||||
|
padding-left: 15px; |
||||
|
padding-right: 18px; |
||||
|
margin-right: 0; |
||||
|
margin-top: 0; |
||||
|
margin-bottom: 0; |
||||
|
border-radius: 10px; |
||||
|
} |
||||
|
#tray { |
||||
|
color: #${colors.base05}; |
||||
|
} |
||||
|
''; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,54 @@ |
|||||
|
{ config, pkgs, ... }: |
||||
|
|
||||
|
let |
||||
|
inherit (config) colorscheme; |
||||
|
inherit (colorscheme) colors; |
||||
|
in |
||||
|
{ |
||||
|
programs.wezterm = { |
||||
|
enable = true; |
||||
|
colorSchemes = { |
||||
|
"${colorscheme.slug}" = { |
||||
|
foreground = "#${colors.base05}"; |
||||
|
background = "#${colors.base00}"; |
||||
|
|
||||
|
ansi = [ |
||||
|
"#${colors.base08}" |
||||
|
"#${colors.base09}" |
||||
|
"#${colors.base0A}" |
||||
|
"#${colors.base0B}" |
||||
|
"#${colors.base0C}" |
||||
|
"#${colors.base0D}" |
||||
|
"#${colors.base0E}" |
||||
|
"#${colors.base0F}" |
||||
|
]; |
||||
|
brights = [ |
||||
|
"#${colors.base00}" |
||||
|
"#${colors.base01}" |
||||
|
"#${colors.base02}" |
||||
|
"#${colors.base03}" |
||||
|
"#${colors.base04}" |
||||
|
"#${colors.base05}" |
||||
|
"#${colors.base06}" |
||||
|
"#${colors.base07}" |
||||
|
]; |
||||
|
cursor_fg = "#${colors.base00}"; |
||||
|
cursor_bg = "#${colors.base05}"; |
||||
|
selection_fg = "#${colors.base00}"; |
||||
|
selection_bg = "#${colors.base05}"; |
||||
|
}; |
||||
|
}; |
||||
|
extraConfig = /* lua */ '' |
||||
|
return { |
||||
|
font = wezterm.font("${config.fontProfiles.monospace.family}"), |
||||
|
font_size = 12.0, |
||||
|
color_scheme = "${colorscheme.slug}", |
||||
|
hide_tab_bar_if_only_one_tab = true, |
||||
|
window_close_confirmation = "NeverPrompt", |
||||
|
set_environment_variables = { |
||||
|
TERM = 'wezterm', |
||||
|
}, |
||||
|
} |
||||
|
''; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
--- a/src/wofi.c Mon Feb 22 23:53:57 2021 -0800
|
||||
|
+++ b/src/wofi.c Wed Aug 11 13:49:13 2021 -0300
|
||||
|
@@ -881,12 +881,15 @@
|
||||
|
} |
||||
|
|
||||
|
void wofi_term_run(const char* cmd) { |
||||
|
+ char *shell = getenv("SHELL");
|
||||
|
+ if (!shell) shell = "sh";
|
||||
|
+
|
||||
|
if(terminal != NULL) { |
||||
|
- execlp(terminal, terminal, "-e", cmd, NULL);
|
||||
|
+ execlp(terminal, terminal, "-e", shell, "-c", cmd, NULL);
|
||||
|
} |
||||
|
size_t term_count = sizeof(terminals) / sizeof(char*); |
||||
|
for(size_t count = 0; count < term_count; ++count) { |
||||
|
- execlp(terminals[count], terminals[count], "-e", cmd, NULL);
|
||||
|
+ execlp(terminals[count], terminals[count], "-e", shell, "-c", cmd, NULL);
|
||||
|
} |
||||
|
fprintf(stderr, "No terminal emulator found please set term in config or use --term\n"); |
||||
|
exit(1); |
||||
@ -0,0 +1,27 @@ |
|||||
|
{ config, lib, pkgs, ... }: |
||||
|
let |
||||
|
wofi = pkgs.wofi.overrideAttrs (oa: { |
||||
|
patches = (oa.patches or [ ]) ++ [ |
||||
|
./wofi-run-shell.patch # Fix for https://todo.sr.ht/~scoopta/wofi/174 |
||||
|
]; |
||||
|
}); |
||||
|
|
||||
|
pass = config.programs.password-store.package; |
||||
|
passEnabled = config.programs.password-store.enable; |
||||
|
pass-wofi = pkgs.pass-wofi.override { inherit pass; }; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = [ wofi ] ++ |
||||
|
(lib.optional passEnabled pass-wofi); |
||||
|
|
||||
|
xdg.configFile."wofi/config".text = '' |
||||
|
image_size=48 |
||||
|
columns=3 |
||||
|
allow_images=true |
||||
|
insensitive=true |
||||
|
|
||||
|
run-always_parse_args=true |
||||
|
run-cache_file=/dev/null |
||||
|
run-exec_search=true |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,32 @@ |
|||||
|
{ config, ... }: |
||||
|
let inherit (config.colorscheme) colors; |
||||
|
in { |
||||
|
programs.zathura = { |
||||
|
enable = true; |
||||
|
options = { |
||||
|
selection-clipboard = "clipboard"; |
||||
|
font = "${config.fontProfiles.regular.family} 12"; |
||||
|
recolor = true; |
||||
|
default-bg = "#${colors.base00}"; |
||||
|
default-fg = "#${colors.base01}"; |
||||
|
statusbar-bg = "#${colors.base02}"; |
||||
|
statusbar-fg = "#${colors.base04}"; |
||||
|
inputbar-bg = "#${colors.base00}"; |
||||
|
inputbar-fg = "#${colors.base07}"; |
||||
|
notification-bg = "#${colors.base00}"; |
||||
|
notification-fg = "#${colors.base07}"; |
||||
|
notification-error-bg = "#${colors.base00}"; |
||||
|
notification-error-fg = "#${colors.base08}"; |
||||
|
notification-warning-bg = "#${colors.base00}"; |
||||
|
notification-warning-fg = "#${colors.base08}"; |
||||
|
highlight-color = "#${colors.base0A}"; |
||||
|
highlight-active-color = "#${colors.base0D}"; |
||||
|
completion-bg = "#${colors.base01}"; |
||||
|
completion-fg = "#${colors.base05}"; |
||||
|
completions-highlight-bg = "#${colors.base0D}"; |
||||
|
completions-highlight-fg = "#${colors.base07}"; |
||||
|
recolor-lightcolor = "#${colors.base00}"; |
||||
|
recolor-darkcolor = "#${colors.base06}"; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
imports = [ ../common ]; |
||||
|
} |
||||
@ -0,0 +1,252 @@ |
|||||
|
{ home, colorscheme, wallpaper }: |
||||
|
let |
||||
|
inherit (home.sessionVariables) TERMINAL BROWSER EDITOR; |
||||
|
in |
||||
|
'' |
||||
|
general { |
||||
|
gaps_in=15 |
||||
|
gaps_out=20 |
||||
|
border_size=2.7 |
||||
|
col.active_border=0xff${colorscheme.colors.base0C} |
||||
|
col.inactive_border=0xff${colorscheme.colors.base02} |
||||
|
col.group_border_active=0xff${colorscheme.colors.base0B} |
||||
|
col.group_border=0xff${colorscheme.colors.base04} |
||||
|
cursor_inactive_timeout=4 |
||||
|
} |
||||
|
|
||||
|
decoration { |
||||
|
active_opacity=0.94 |
||||
|
inactive_opacity=0.84 |
||||
|
fullscreen_opacity=1.0 |
||||
|
rounding=5 |
||||
|
blur=true |
||||
|
blur_size=5 |
||||
|
blur_passes=3 |
||||
|
blur_new_optimizations=true |
||||
|
blur_ignore_opacity=true |
||||
|
drop_shadow=true |
||||
|
shadow_range=12 |
||||
|
shadow_offset=3 3 |
||||
|
col.shadow=0x44000000 |
||||
|
col.shadow_inactive=0x66000000 |
||||
|
} |
||||
|
|
||||
|
animations { |
||||
|
enabled=true |
||||
|
|
||||
|
bezier=easein,0.11, 0, 0.5, 0 |
||||
|
bezier=easeout,0.5, 1, 0.89, 1 |
||||
|
bezier=easeinout,0.45, 0, 0.55, 1 |
||||
|
|
||||
|
animation=windowsIn,1,3,easeout,slide |
||||
|
animation=windowsOut,1,3,easein,slide |
||||
|
animation=windowsMove,1,3,easeout |
||||
|
|
||||
|
animation=fadeIn,1,3,easeout |
||||
|
animation=fadeOut,1,3,easein |
||||
|
animation=fadeSwitch,1,3,easeout |
||||
|
animation=fadeShadow,1,3,easeout |
||||
|
animation=fadeDim,1,3,easeout |
||||
|
animation=border,1,3,easeout |
||||
|
|
||||
|
animation=workspaces,1,2,easeout,slide |
||||
|
} |
||||
|
|
||||
|
dwindle { |
||||
|
split_width_multiplier=1.35 |
||||
|
} |
||||
|
|
||||
|
misc { |
||||
|
vfr=on |
||||
|
} |
||||
|
|
||||
|
input { |
||||
|
kb_layout=br,us |
||||
|
touchpad { |
||||
|
disable_while_typing=false |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Passthrough mode (e.g. for VNC) |
||||
|
bind=SUPER,P,submap,passthrough |
||||
|
submap=passthrough |
||||
|
bind=SUPER,P,submap,reset |
||||
|
submap=reset |
||||
|
|
||||
|
|
||||
|
# Startup |
||||
|
exec-once=waybar |
||||
|
exec=swaybg -i ${wallpaper} --mode fill |
||||
|
exec-once=mako |
||||
|
exec-once=swayidle -w |
||||
|
|
||||
|
# Mouse binding |
||||
|
bindm=SUPER,mouse:272,movewindow |
||||
|
bindm=SUPER,mouse:273,resizewindow |
||||
|
|
||||
|
# Program bindings |
||||
|
bind=SUPER,Return,exec,${TERMINAL} |
||||
|
bind=SUPER,w,exec,makoctl dismiss |
||||
|
bind=SUPER,v,exec,${TERMINAL} $SHELL -ic ${EDITOR} |
||||
|
bind=SUPER,b,exec,${BROWSER} |
||||
|
|
||||
|
bind=SUPER,x,exec,wofi -S drun -x 10 -y 10 -W 25% -H 60% |
||||
|
bind=SUPER,d,exec,wofi -S run |
||||
|
bind=,Scroll_Lock,exec,pass-wofi # fn+k |
||||
|
bind=,XF86Calculator,exec,pass-wofi # fn+f12 |
||||
|
bind=SUPER,semicolon,exec,pass-wofi |
||||
|
|
||||
|
# Toggle waybar |
||||
|
bind=,XF86Tools,exec,pkill -USR1 waybar # profile button |
||||
|
|
||||
|
# Lock screen |
||||
|
bind=,XF86Launch5,exec,swaylock -S |
||||
|
bind=,XF86Launch4,exec,swaylock -S |
||||
|
bind=SUPER,backspace,exec,swaylock -S |
||||
|
|
||||
|
# Screenshots |
||||
|
bind=,Print,exec,grimblast --notify copy output |
||||
|
bind=SHIFT,Print,exec,grimblast --notify copy active |
||||
|
bind=CONTROL,Print,exec,grimblast --notify copy screen |
||||
|
bind=SUPER,Print,exec,grimblast --notify copy window |
||||
|
bind=ALT,Print,exec,grimblast --notify copy area |
||||
|
|
||||
|
# Keyboard controls (brightness, media, sound, etc) |
||||
|
bind=,XF86MonBrightnessUp,exec,light -A 10 |
||||
|
bind=,XF86MonBrightnessDown,exec,light -U 10 |
||||
|
|
||||
|
bind=,XF86AudioNext,exec,playerctl next |
||||
|
bind=,XF86AudioPrev,exec,playerctl previous |
||||
|
bind=,XF86AudioPlay,exec,playerctl play-pause |
||||
|
bind=,XF86AudioStop,exec,playerctl stop |
||||
|
bind=ALT,XF86AudioNext,exec,playerctld shift |
||||
|
bind=ALT,XF86AudioPrev,exec,playerctld unshift |
||||
|
bind=ALT,XF86AudioPlay,exec,systemctl --user restart playerctld |
||||
|
|
||||
|
bind=,XF86AudioRaiseVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ +5% |
||||
|
bind=,XF86AudioLowerVolume,exec,pactl set-sink-volume @DEFAULT_SINK@ -5% |
||||
|
bind=,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle |
||||
|
|
||||
|
bind=SHIFT,XF86AudioMute,exec,pactl set-source-mute @DEFAULT_SOURCE@ toggle |
||||
|
bind=,XF86AudioMicMute,exec,pactl set-source-mute @DEFAULT_SOURCE@ toggle |
||||
|
|
||||
|
|
||||
|
# Window manager controls |
||||
|
bind=SUPERSHIFT,q,killactive |
||||
|
bind=SUPERSHIFT,e,exit |
||||
|
|
||||
|
bind=SUPER,s,togglesplit |
||||
|
bind=SUPER,f,fullscreen,1 |
||||
|
bind=SUPERSHIFT,f,fullscreen,0 |
||||
|
bind=SUPERSHIFT,space,togglefloating |
||||
|
|
||||
|
bind=SUPER,minus,splitratio,-0.25 |
||||
|
bind=SUPERSHIFT,minus,splitratio,-0.3333333 |
||||
|
|
||||
|
bind=SUPER,equal,splitratio,0.25 |
||||
|
bind=SUPERSHIFT,equal,splitratio,0.3333333 |
||||
|
|
||||
|
bind=SUPER,g,togglegroup |
||||
|
bind=SUPER,apostrophe,changegroupactive,f |
||||
|
bind=SUPERSHIFT,apostrophe,changegroupactive,b |
||||
|
|
||||
|
bind=SUPER,left,movefocus,l |
||||
|
bind=SUPER,right,movefocus,r |
||||
|
bind=SUPER,up,movefocus,u |
||||
|
bind=SUPER,down,movefocus,d |
||||
|
bind=SUPER,h,movefocus,l |
||||
|
bind=SUPER,l,movefocus,r |
||||
|
bind=SUPER,k,movefocus,u |
||||
|
bind=SUPER,j,movefocus,d |
||||
|
|
||||
|
bind=SUPERSHIFT,left,swapwindow,l |
||||
|
bind=SUPERSHIFT,right,swapwindow,r |
||||
|
bind=SUPERSHIFT,up,swapwindow,u |
||||
|
bind=SUPERSHIFT,down,swapwindow,d |
||||
|
bind=SUPERSHIFT,h,swapwindow,l |
||||
|
bind=SUPERSHIFT,l,swapwindow,r |
||||
|
bind=SUPERSHIFT,k,swapwindow,u |
||||
|
bind=SUPERSHIFT,j,swapwindow,d |
||||
|
|
||||
|
bind=SUPERCONTROL,left,focusmonitor,l |
||||
|
bind=SUPERCONTROL,right,focusmonitor,r |
||||
|
bind=SUPERCONTROL,up,focusmonitor,u |
||||
|
bind=SUPERCONTROL,down,focusmonitor,d |
||||
|
bind=SUPERCONTROL,h,focusmonitor,l |
||||
|
bind=SUPERCONTROL,l,focusmonitor,r |
||||
|
bind=SUPERCONTROL,k,focusmonitor,u |
||||
|
bind=SUPERCONTROL,j,focusmonitor,d |
||||
|
|
||||
|
bind=SUPERCONTROL,1,focusmonitor,DP-1 |
||||
|
bind=SUPERCONTROL,2,focusmonitor,DP-2 |
||||
|
bind=SUPERCONTROL,3,focusmonitor,DP-3 |
||||
|
|
||||
|
bind=SUPERCONTROLSHIFT,left,movewindow,mon:l |
||||
|
bind=SUPERCONTROLSHIFT,right,movewindow,mon:r |
||||
|
bind=SUPERCONTROLSHIFT,up,movewindow,mon:u |
||||
|
bind=SUPERCONTROLSHIFT,down,movewindow,mon:d |
||||
|
bind=SUPERCONTROLSHIFT,h,movewindow,mon:l |
||||
|
bind=SUPERCONTROLSHIFT,l,movewindow,mon:r |
||||
|
bind=SUPERCONTROLSHIFT,k,movewindow,mon:u |
||||
|
bind=SUPERCONTROLSHIFT,j,movewindow,mon:d |
||||
|
|
||||
|
bind=SUPERALT,left,movecurrentworkspacetomonitor,l |
||||
|
bind=SUPERALT,right,movecurrentworkspacetomonitor,r |
||||
|
bind=SUPERALT,up,movecurrentworkspacetomonitor,u |
||||
|
bind=SUPERALT,down,movecurrentworkspacetomonitor,d |
||||
|
bind=SUPERALT,h,movecurrentworkspacetomonitor,l |
||||
|
bind=SUPERALT,l,movecurrentworkspacetomonitor,r |
||||
|
bind=SUPERALT,k,movecurrentworkspacetomonitor,u |
||||
|
bind=SUPERALT,j,movecurrentworkspacetomonitor,d |
||||
|
|
||||
|
bind=SUPER,u,togglespecialworkspace |
||||
|
bind=SUPERSHIFT,u,movetoworkspace,special |
||||
|
|
||||
|
bind=SUPER,1,workspace,01 |
||||
|
bind=SUPER,2,workspace,02 |
||||
|
bind=SUPER,3,workspace,03 |
||||
|
bind=SUPER,4,workspace,04 |
||||
|
bind=SUPER,5,workspace,05 |
||||
|
bind=SUPER,6,workspace,06 |
||||
|
bind=SUPER,7,workspace,07 |
||||
|
bind=SUPER,8,workspace,08 |
||||
|
bind=SUPER,9,workspace,09 |
||||
|
bind=SUPER,0,workspace,10 |
||||
|
bind=SUPER,f1,workspace,11 |
||||
|
bind=SUPER,f2,workspace,12 |
||||
|
bind=SUPER,f3,workspace,13 |
||||
|
bind=SUPER,f4,workspace,14 |
||||
|
bind=SUPER,f5,workspace,15 |
||||
|
bind=SUPER,f6,workspace,16 |
||||
|
bind=SUPER,f7,workspace,17 |
||||
|
bind=SUPER,f8,workspace,18 |
||||
|
bind=SUPER,f9,workspace,19 |
||||
|
bind=SUPER,f10,workspace,20 |
||||
|
bind=SUPER,f11,workspace,21 |
||||
|
bind=SUPER,f12,workspace,22 |
||||
|
|
||||
|
bind=SUPERSHIFT,1,movetoworkspacesilent,01 |
||||
|
bind=SUPERSHIFT,2,movetoworkspacesilent,02 |
||||
|
bind=SUPERSHIFT,3,movetoworkspacesilent,03 |
||||
|
bind=SUPERSHIFT,4,movetoworkspacesilent,04 |
||||
|
bind=SUPERSHIFT,5,movetoworkspacesilent,05 |
||||
|
bind=SUPERSHIFT,6,movetoworkspacesilent,06 |
||||
|
bind=SUPERSHIFT,7,movetoworkspacesilent,07 |
||||
|
bind=SUPERSHIFT,8,movetoworkspacesilent,08 |
||||
|
bind=SUPERSHIFT,9,movetoworkspacesilent,09 |
||||
|
bind=SUPERSHIFT,0,movetoworkspacesilent,10 |
||||
|
bind=SUPERSHIFT,f1,movetoworkspacesilent,11 |
||||
|
bind=SUPERSHIFT,f2,movetoworkspacesilent,12 |
||||
|
bind=SUPERSHIFT,f3,movetoworkspacesilent,13 |
||||
|
bind=SUPERSHIFT,f4,movetoworkspacesilent,14 |
||||
|
bind=SUPERSHIFT,f5,movetoworkspacesilent,15 |
||||
|
bind=SUPERSHIFT,f6,movetoworkspacesilent,16 |
||||
|
bind=SUPERSHIFT,f7,movetoworkspacesilent,17 |
||||
|
bind=SUPERSHIFT,f8,movetoworkspacesilent,18 |
||||
|
bind=SUPERSHIFT,f9,movetoworkspacesilent,19 |
||||
|
bind=SUPERSHIFT,f10,movetoworkspacesilent,20 |
||||
|
bind=SUPERSHIFT,f11,movetoworkspacesilent,21 |
||||
|
bind=SUPERSHIFT,f12,movetoworkspacesilent,22 |
||||
|
|
||||
|
blurls=waybar |
||||
|
'' |
||||
@ -0,0 +1,50 @@ |
|||||
|
{ inputs, lib, config, pkgs, ... }: { |
||||
|
imports = [ |
||||
|
../common |
||||
|
../common/wayland-wm |
||||
|
inputs.hyprland.homeManagerModules.default |
||||
|
]; |
||||
|
|
||||
|
programs = { |
||||
|
fish.loginShellInit = '' |
||||
|
if test (tty) = "/dev/tty1" |
||||
|
exec Hyprland &> /dev/null |
||||
|
end |
||||
|
''; |
||||
|
zsh.loginExtra = '' |
||||
|
if [ "$(tty)" = "/dev/tty1" ]; then |
||||
|
exec Hyprland &> /dev/null |
||||
|
fi |
||||
|
''; |
||||
|
zsh.profileExtra = '' |
||||
|
if [ "$(tty)" = "/dev/tty1" ]; then |
||||
|
exec Hyprland &> /dev/null |
||||
|
fi |
||||
|
''; |
||||
|
}; |
||||
|
|
||||
|
home.packages = with pkgs; [ |
||||
|
inputs.hyprwm-contrib.packages.${system}.grimblast |
||||
|
swaybg |
||||
|
swayidle |
||||
|
# TODO |
||||
|
# inputs.hyprland.packages.${system}.xdg-desktop-portal-hyprland |
||||
|
]; |
||||
|
|
||||
|
programs.waybar.package = pkgs.waybar.overrideAttrs (oa: { |
||||
|
mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ]; |
||||
|
}); |
||||
|
|
||||
|
wayland.windowManager.hyprland = { |
||||
|
enable = true; |
||||
|
package = inputs.hyprland.packages.${pkgs.system}.default; |
||||
|
extraConfig = |
||||
|
(import ./monitors.nix { |
||||
|
inherit lib; |
||||
|
inherit (config) monitors; |
||||
|
}) + |
||||
|
(import ./config.nix { |
||||
|
inherit (config) home colorscheme wallpaper; |
||||
|
}); |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
# Convert config.monitors into hyprland's format |
||||
|
{ lib, monitors }: |
||||
|
let enabledMonitors = lib.filter (m: m.enabled) monitors; |
||||
|
in |
||||
|
|
||||
|
lib.concatStringsSep "\n" (lib.forEach enabledMonitors (m: '' |
||||
|
monitor=${m.name},${toString m.width}x${toString m.height}@${toString m.refreshRate},${toString m.x}x${toString m.y},1 |
||||
|
${lib.optionalString (m.workspace != null)"workspace=${m.name},${m.workspace}"} |
||||
|
'')) |
||||
|
|
||||
|
|
||||
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
imports = [ |
||||
|
./wpa-gui.nix |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = [ pkgs.wpa_supplicant_gui ]; |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
{ pkgs, config, ... }: |
||||
|
{ |
||||
|
programs.emacs = { |
||||
|
enable = true; |
||||
|
package = pkgs.emacs-gtk; |
||||
|
|
||||
|
overrides = final: _prev: { |
||||
|
nix-theme = final.callPackage ./theme.nix { inherit config; }; |
||||
|
}; |
||||
|
extraPackages = epkgs: with epkgs; [ |
||||
|
nix-theme |
||||
|
|
||||
|
nix-mode |
||||
|
magit |
||||
|
lsp-mode |
||||
|
which-key |
||||
|
mmm-mode |
||||
|
|
||||
|
evil |
||||
|
evil-org |
||||
|
evil-collection |
||||
|
evil-surround |
||||
|
]; |
||||
|
|
||||
|
extraConfig = builtins.readFile ./init.el; |
||||
|
}; |
||||
|
services.emacs = { |
||||
|
enable = true; |
||||
|
client.enable = true; |
||||
|
defaultEditor = true; |
||||
|
socketActivation.enable = true; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
(scroll-bar-mode -1) |
||||
|
(tool-bar-mode -1) |
||||
|
(tooltip-mode -1) |
||||
|
(set-fringe-mode 10) |
||||
|
(menu-bar-mode -1) |
||||
|
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 120) |
||||
|
(setq visible-bell t) |
||||
|
(global-display-line-numbers-mode) |
||||
|
(setq display-line-numbers-type 'relative) |
||||
|
|
||||
|
(setq base16-theme-256-color-source "base16-shell") |
||||
|
(load-theme 'base16-${config.colorscheme.slug} t) |
||||
|
|
||||
|
(require 'nix-mode) |
||||
|
(add-to-list 'auto-mode-alist '("\\.nix\\'" . nix-mode)) |
||||
|
|
||||
|
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) |
||||
|
(global-set-key "\C-cl" 'org-store-link) |
||||
|
(global-set-key "\C-ca" 'org-agenda) |
||||
|
(setq org-directory "~/Documents/Org") |
||||
|
(setq org-agenda-files (directory-files-recursively org-directory "\\.org$")) |
||||
|
|
||||
|
(require 'lsp-mode) |
||||
|
(add-hook 'nix-mode-hook #'lsp) |
||||
|
|
||||
|
(require 'which-key) |
||||
|
(which-key-mode) |
||||
|
|
||||
|
(require 'mmm-mode) |
||||
|
(setq mmm-global-mode 't) |
||||
|
|
||||
|
(mmm-add-classes |
||||
|
'((nix-block |
||||
|
:front " \/\* \\([a-zA-Z0-9_-]+\\) \*\/ '''[^']" |
||||
|
:back "''';" |
||||
|
;; :save-matches 1 |
||||
|
;; :delimiter-mode nil |
||||
|
;; :match-submode identity |
||||
|
:submode org |
||||
|
))) |
||||
|
(mmm-add-mode-ext-class 'nix-mode nil 'nix-block) |
||||
|
|
||||
|
|
||||
|
|
||||
|
(setq evil-want-keybinding nil) |
||||
|
(require 'evil) |
||||
|
(evil-mode 1) |
||||
|
(setq evil-jumps-across-buffers t) |
||||
|
|
||||
|
(require 'evil-org) |
||||
|
(add-hook 'org-mode-hook 'evil-org-mode) |
||||
|
(evil-org-set-key-theme '(navigation insert textobjects additional calendar)) |
||||
|
(require 'evil-org-agenda) |
||||
|
(evil-org-agenda-set-keys) |
||||
|
|
||||
|
(evil-collection-init) |
||||
|
|
||||
|
(global-evil-surround-mode 1) |
||||
@ -0,0 +1,42 @@ |
|||||
|
{ emacsPackagesFor, writeText, config, ... }: |
||||
|
let |
||||
|
emacsPackages = emacsPackagesFor config.programs.emacs.package; |
||||
|
scheme = config.colorscheme; |
||||
|
in |
||||
|
emacsPackages.trivialBuild { |
||||
|
pname = "theme"; |
||||
|
src = writeText "nix-${scheme.slug}.el" '' |
||||
|
(require 'base16-theme) |
||||
|
|
||||
|
(defvar base16-${scheme.slug}-theme-colors |
||||
|
'(:base00 "#${scheme.colors.base00}" |
||||
|
:base01 "#${scheme.colors.base01}" |
||||
|
:base02 "#${scheme.colors.base02}" |
||||
|
:base03 "#${scheme.colors.base03}" |
||||
|
:base04 "#${scheme.colors.base04}" |
||||
|
:base05 "#${scheme.colors.base05}" |
||||
|
:base06 "#${scheme.colors.base06}" |
||||
|
:base07 "#${scheme.colors.base07}" |
||||
|
:base08 "#${scheme.colors.base08}" |
||||
|
:base09 "#${scheme.colors.base09}" |
||||
|
:base0A "#${scheme.colors.base0A}" |
||||
|
:base0B "#${scheme.colors.base0B}" |
||||
|
:base0C "#${scheme.colors.base0C}" |
||||
|
:base0D "#${scheme.colors.base0D}" |
||||
|
:base0E "#${scheme.colors.base0E}" |
||||
|
:base0F "#${scheme.colors.base0F}") |
||||
|
"All colors for Base16 ${scheme.name} are defined here.") |
||||
|
|
||||
|
;; Define the theme |
||||
|
(deftheme base16-${scheme.slug}) |
||||
|
|
||||
|
;; Add all the faces to the theme |
||||
|
(base16-theme-define 'base16-${scheme.slug} base16-${scheme.slug}-theme-colors) |
||||
|
|
||||
|
;; Mark the theme as provided |
||||
|
(provide-theme 'base16-${scheme.slug}) |
||||
|
|
||||
|
(provide 'base16-${scheme.slug}-theme) |
||||
|
''; |
||||
|
packageRequires = [ emacsPackages.base16-theme ]; |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
imports = [ |
||||
|
./lutris.nix |
||||
|
./steam.nix |
||||
|
./prism-launcher.nix |
||||
|
./runescape.nix |
||||
|
]; |
||||
|
home.packages = with pkgs; [ gamescope ]; |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
{ lib, pkgs, ... }: { |
||||
|
home = { |
||||
|
packages = [ pkgs.factorio ]; |
||||
|
persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
allowOther = true; |
||||
|
directories = [ ".factorio" ]; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
{ pkgs, lib, ... }: { |
||||
|
home.packages = [ pkgs.lutris ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
allowOther = true; |
||||
|
directories = [ |
||||
|
{ |
||||
|
# Use symlink, as games may be IO-heavy |
||||
|
directory = "Games/Lutris"; |
||||
|
method = "symlink"; |
||||
|
} |
||||
|
".config/lutris" |
||||
|
".local/share/lutris" |
||||
|
]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
{ pkgs, lib, ... }: { |
||||
|
home.packages = [ pkgs.osu-lazer ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".local/share/osu" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
{ pkgs, lib, ... }: { |
||||
|
home.packages = [ pkgs.prismlauncher-qt5 ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".local/share/PrismLauncher" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
let |
||||
|
# Add PULSE_LATENCY_MSEC to .desktop file |
||||
|
pulse_latency = 100; |
||||
|
runescape = pkgs.runescape.overrideAttrs (oa: { |
||||
|
nativeBuildInputs = (oa.nativeBuildInputs or []) ++ [ |
||||
|
pkgs.makeWrapper |
||||
|
]; |
||||
|
buildCommand = (oa.buildCommand or "") + '' |
||||
|
wrapProgram "$out/bin/RuneScape" \ |
||||
|
--set PULSE_LATENCY_MSEC ${toString pulse_latency} \ |
||||
|
--run 'echo $PULSE_LATENCY_MSEC' |
||||
|
''; |
||||
|
}); |
||||
|
in { |
||||
|
home.packages = [ runescape ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
allowOther = true; |
||||
|
directories = [ |
||||
|
"Jagex" |
||||
|
]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
{ pkgs, lib, ... }: |
||||
|
let |
||||
|
steam-with-pkgs = pkgs.steam.override { |
||||
|
extraPkgs = pkgs: with pkgs; [ |
||||
|
xorg.libXcursor |
||||
|
xorg.libXi |
||||
|
xorg.libXinerama |
||||
|
xorg.libXScrnSaver |
||||
|
libpng |
||||
|
libpulseaudio |
||||
|
libvorbis |
||||
|
stdenv.cc.cc.lib |
||||
|
libkrb5 |
||||
|
keyutils |
||||
|
]; |
||||
|
}; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = with pkgs; [ |
||||
|
steam-with-pkgs |
||||
|
gamescope |
||||
|
protontricks |
||||
|
]; |
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
allowOther = true; |
||||
|
directories = [ |
||||
|
".factorio" |
||||
|
".config/Hero_Siege" |
||||
|
".config/unity3d/Berserk Games/Tabletop Simulator" |
||||
|
".config/unity3d/IronGate/Valheim" |
||||
|
".local/share/Tabletop Simulator" |
||||
|
".local/share/Paradox Interactive" |
||||
|
".paradoxlauncher" |
||||
|
{ |
||||
|
# A couple of games don't play well with bindfs |
||||
|
directory = ".local/share/Steam"; |
||||
|
method = "symlink"; |
||||
|
} |
||||
|
]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
{ pkgs, lib, ... }: { |
||||
|
home.packages = [ pkgs.yuzu-mainline ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
allowOther = true; |
||||
|
directories = [ "Games/Yuzu" ".config/yuzu" ".local/share/yuzu" ]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
{ config, ... }: |
||||
|
let |
||||
|
inherit (config) colorscheme; |
||||
|
in |
||||
|
{ |
||||
|
home.sessionVariables.COLORTERM = "truecolor"; |
||||
|
programs.helix = { |
||||
|
enable = true; |
||||
|
settings = { |
||||
|
theme = colorscheme.slug; |
||||
|
editor = { |
||||
|
color-modes = true; |
||||
|
line-number = "relative"; |
||||
|
indent-guides.render = true; |
||||
|
cursor-shape = { |
||||
|
normal = "block"; |
||||
|
insert = "bar"; |
||||
|
select = "underline"; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
themes = import ./theme.nix { inherit colorscheme; }; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,72 @@ |
|||||
|
{ colorscheme }: { |
||||
|
"${colorscheme.slug}" = { |
||||
|
palette = builtins.mapAttrs (name: value: "#${value}") colorscheme.colors; # Add leading '#' |
||||
|
"attributes" = "base09"; |
||||
|
"comment" = { fg = "base03"; modifiers = [ "italic" ]; }; |
||||
|
"constant" = "base09"; |
||||
|
"constant.character.escape" = "base0C"; |
||||
|
"constant.numeric" = "base09"; |
||||
|
"constructor" = "base0D"; |
||||
|
"debug" = "base03"; |
||||
|
"diagnostic" = { modifiers = [ "underlined" ]; }; |
||||
|
"diagnostic.error" = { underline = { style = "curl"; }; }; |
||||
|
"diagnostic.hint" = { underline = { style = "curl"; }; }; |
||||
|
"diagnostic.info" = { underline = { style = "curl"; }; }; |
||||
|
"diagnostic.warning" = { underline = { style = "curl"; }; }; |
||||
|
"diff.delta" = "base09"; |
||||
|
"diff.minus" = "base08"; |
||||
|
"diff.plus" = "base0B"; |
||||
|
"error" = "base08"; |
||||
|
"function" = "base0D"; |
||||
|
"hint" = "base03"; |
||||
|
"info" = "base0D"; |
||||
|
"keyword" = "base0E"; |
||||
|
"label" = "base0E"; |
||||
|
"markup.bold" = { fg = "base0A"; modifiers = [ "bold" ]; }; |
||||
|
"markup.heading" = "base0D"; |
||||
|
"markup.italic" = { fg = "base0E"; modifiers = [ "italic" ]; }; |
||||
|
"markup.link.text" = "base08"; |
||||
|
"markup.link.url" = { fg = "base09"; modifiers = [ "underlined" ]; }; |
||||
|
"markup.list" = "base08"; |
||||
|
"markup.quote" = "base0C"; |
||||
|
"markup.raw" = "base0B"; |
||||
|
"markup.strikethrough" = { modifiers = [ "crossed_out" ]; }; |
||||
|
"namespace" = "base0E"; |
||||
|
"operator" = "base05"; |
||||
|
"special" = "base0D"; |
||||
|
"string" = "base0B"; |
||||
|
"type" = "base0A"; |
||||
|
"ui.background" = { bg = "base00"; }; |
||||
|
"ui.bufferline" = { fg = "base04"; bg = "base00"; }; |
||||
|
"ui.bufferline.active" = { fg = "base00"; bg = "base03"; modifiers = [ "bold" ]; }; |
||||
|
"ui.cursor" = { fg = "base04"; modifiers = [ "reversed" ]; }; |
||||
|
"ui.cursor.insert" = { fg = "base0A"; modifiers = [ "underlined" ]; }; |
||||
|
"ui.cursor.match" = { fg = "base0A"; modifiers = [ "underlined" ]; }; |
||||
|
"ui.cursor.select" = { fg = "base0A"; modifiers = [ "underlined" ]; }; |
||||
|
"ui.cursorline.primary" = { fg = "base05"; bg = "base01"; }; |
||||
|
"ui.gutter" = { bg = "base00"; }; |
||||
|
"ui.help" = { fg = "base06"; bg = "base01"; }; |
||||
|
"ui.linenr" = { fg = "base03"; bg = "base00"; }; |
||||
|
"ui.linenr.selected" = { fg = "base04"; bg = "base01"; modifiers = [ "bold" ]; }; |
||||
|
"ui.menu" = { fg = "base05"; bg = "base01"; }; |
||||
|
"ui.menu.scroll" = { fg = "base03"; bg = "base01"; }; |
||||
|
"ui.menu.selected" = { fg = "base01"; bg = "base04"; }; |
||||
|
"ui.popup" = { bg = "base01"; }; |
||||
|
"ui.selection" = { bg = "base02"; }; |
||||
|
"ui.selection.primary" = { bg = "base02"; }; |
||||
|
"ui.statusline" = { fg = "base0B"; bg = "base02"; }; |
||||
|
"ui.statusline.inactive" = { bg = "base01"; fg = "base02"; }; |
||||
|
"ui.statusline.insert" = { fg = "base00"; bg = "base0B"; }; |
||||
|
"ui.statusline.normal" = { fg = "base00"; bg = "base04"; }; |
||||
|
"ui.statusline.select" = { fg = "base00"; bg = "base0E"; }; |
||||
|
"ui.text" = "base05"; |
||||
|
"ui.text.focus" = "base05"; |
||||
|
"ui.virtual.indent-guide" = { fg = "base03"; }; |
||||
|
"ui.virtual.ruler" = { bg = "base01"; }; |
||||
|
"ui.virtual.whitespace" = { fg = "base01"; }; |
||||
|
"ui.window" = { bg = "base01"; }; |
||||
|
"variable" = "base08"; |
||||
|
"variable.other.member" = "base08"; |
||||
|
"warning" = "base09"; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
{ pkgs, ... }: |
||||
|
{ |
||||
|
home.packages = with pkgs; [ alsa-utils ]; |
||||
|
services.fluidsynth = { |
||||
|
enable = true; |
||||
|
soundService = "pipewire-pulse"; |
||||
|
extraOptions = [ |
||||
|
"-g 2" |
||||
|
]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,178 @@ |
|||||
|
{ config, pkgs, ... }: |
||||
|
let |
||||
|
color = pkgs.writeText "color.vim" (import ./theme.nix config.colorscheme); |
||||
|
in |
||||
|
{ |
||||
|
imports = [ |
||||
|
./lsp.nix |
||||
|
./syntaxes.nix |
||||
|
./ui.nix |
||||
|
]; |
||||
|
home.sessionVariables.EDITOR = "nvim"; |
||||
|
|
||||
|
programs.neovim = { |
||||
|
enable = true; |
||||
|
|
||||
|
extraConfig = /* vim */ '' |
||||
|
"Use system clipboard |
||||
|
set clipboard=unnamedplus |
||||
|
"Source colorscheme |
||||
|
source ${color} |
||||
|
|
||||
|
"Set fold level to highest in file |
||||
|
"so everything starts out unfolded at just the right level |
||||
|
augroup initial_fold |
||||
|
autocmd! |
||||
|
autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)')) |
||||
|
augroup END |
||||
|
|
||||
|
"Tabs |
||||
|
set tabstop=4 "4 char-wide tab |
||||
|
set expandtab "Use spaces |
||||
|
set softtabstop=0 "Use same length as 'tabstop' |
||||
|
set shiftwidth=0 "Use same length as 'tabstop' |
||||
|
"2 char-wide overrides |
||||
|
augroup two_space_tab |
||||
|
autocmd! |
||||
|
autocmd FileType json,html,htmldjango,hamlet,nix,scss,typescript,php,haskell,terraform setlocal tabstop=2 |
||||
|
augroup END |
||||
|
|
||||
|
"Set tera to use htmldjango syntax |
||||
|
augroup tera_htmldjango |
||||
|
autocmd! |
||||
|
autocmd BufRead,BufNewFile *.tera setfiletype htmldjango |
||||
|
augroup END |
||||
|
|
||||
|
"Options when composing mutt mail |
||||
|
augroup mail_settings |
||||
|
autocmd FileType mail set noautoindent wrapmargin=0 textwidth=0 linebreak wrap formatoptions +=w |
||||
|
augroup END |
||||
|
|
||||
|
"Fix nvim size according to terminal |
||||
|
"(https://github.com/neovim/neovim/issues/11330) |
||||
|
augroup fix_size |
||||
|
autocmd VimEnter * silent exec "!kill -s SIGWINCH" getpid() |
||||
|
augroup END |
||||
|
|
||||
|
"Line numbers |
||||
|
set number relativenumber |
||||
|
|
||||
|
"Scroll up and down |
||||
|
nmap <C-j> <C-e> |
||||
|
nmap <C-k> <C-y> |
||||
|
|
||||
|
"Buffers |
||||
|
nmap <C-l> :bnext<CR> |
||||
|
nmap <C-h> :bprev<CR> |
||||
|
nmap <C-q> :bdel<CR> |
||||
|
|
||||
|
"Loclist |
||||
|
nmap <space>l :lwindow<cr> |
||||
|
nmap [l :lprev<cr> |
||||
|
nmap ]l :lnext<cr> |
||||
|
|
||||
|
nmap <space>L :lhistory<cr> |
||||
|
nmap [L :lolder<cr> |
||||
|
nmap ]L :lnewer<cr> |
||||
|
|
||||
|
"Quickfix |
||||
|
nmap <space>q :cwindow<cr> |
||||
|
nmap [q :cprev<cr> |
||||
|
nmap ]q :cnext<cr> |
||||
|
|
||||
|
nmap <space>Q :chistory<cr> |
||||
|
nmap [Q :colder<cr> |
||||
|
nmap ]Q :cnewer<cr> |
||||
|
|
||||
|
"Make |
||||
|
nmap <space>m :make<cr> |
||||
|
|
||||
|
"Grep (replace with ripgrep) |
||||
|
nmap <space>g :grep<space> |
||||
|
if executable('rg') |
||||
|
set grepprg=rg\ --vimgrep |
||||
|
set grepformat=%f:%l:%c:%m |
||||
|
endif |
||||
|
|
||||
|
"Close other splits |
||||
|
nmap <space>o :only<cr> |
||||
|
|
||||
|
"Sudo save |
||||
|
cmap w!! w !sudo tee > /dev/null % |
||||
|
''; |
||||
|
extraLuaConfig = /* lua */ '' |
||||
|
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Go to declaration" }) |
||||
|
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" }) |
||||
|
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Go to implementation" }) |
||||
|
vim.keymap.set("n", "<space>f", vim.lsp.buf.format, { desc = "Format code" }) |
||||
|
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover Documentation" }) |
||||
|
vim.keymap.set("n", "<space>c", vim.lsp.buf.code_action, { desc = "Code action" }) |
||||
|
|
||||
|
-- Diagnostic |
||||
|
vim.keymap.set("n", "<space>e", vim.diagnostic.open_float, { desc = "Floating diagnostic" }) |
||||
|
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Previous diagnostic" }) |
||||
|
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Next diagnostic" }) |
||||
|
vim.keymap.set("n", "gl", vim.diagnostic.setloclist, { desc = "Diagnostics on loclist" }) |
||||
|
vim.keymap.set("n", "gq", vim.diagnostic.setqflist, { desc = "Diagnostics on quickfix" }) |
||||
|
|
||||
|
function add_sign(name, text) |
||||
|
vim.fn.sign_define(name, { text = text, texthl = name, numhl = name}) |
||||
|
end |
||||
|
|
||||
|
add_sign("DiagnosticSignError", " ") |
||||
|
add_sign("DiagnosticSignWarn", " ") |
||||
|
add_sign("DiagnosticSignHint", " ") |
||||
|
add_sign("DiagnosticSignInfo", " ") |
||||
|
''; |
||||
|
|
||||
|
plugins = with pkgs.vimPlugins; [ |
||||
|
vim-table-mode |
||||
|
editorconfig-nvim |
||||
|
vim-surround |
||||
|
{ |
||||
|
plugin = nvim-autopairs; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('nvim-autopairs').setup{} |
||||
|
''; |
||||
|
} |
||||
|
]; |
||||
|
}; |
||||
|
|
||||
|
xdg.configFile."nvim/init.lua".onChange = '' |
||||
|
XDG_RUNTIME_DIR=''${XDG_RUNTIME_DIR:-/run/user/$(id -u)} |
||||
|
for server in $XDG_RUNTIME_DIR/nvim.*; do |
||||
|
nvim --server $server --remote-send ':source $MYVIMRC<CR>' & |
||||
|
done |
||||
|
''; |
||||
|
|
||||
|
xdg.desktopEntries = { |
||||
|
nvim = { |
||||
|
name = "Neovim"; |
||||
|
genericName = "Text Editor"; |
||||
|
comment = "Edit text files"; |
||||
|
exec = "nvim %F"; |
||||
|
icon = "nvim"; |
||||
|
mimeType = [ |
||||
|
"text/english" |
||||
|
"text/plain" |
||||
|
"text/x-makefile" |
||||
|
"text/x-c++hdr" |
||||
|
"text/x-c++src" |
||||
|
"text/x-chdr" |
||||
|
"text/x-csrc" |
||||
|
"text/x-java" |
||||
|
"text/x-moc" |
||||
|
"text/x-pascal" |
||||
|
"text/x-tcl" |
||||
|
"text/x-tex" |
||||
|
"application/x-shellscript" |
||||
|
"text/x-c" |
||||
|
"text/x-c++" |
||||
|
]; |
||||
|
terminal = true; |
||||
|
type = "Application"; |
||||
|
categories = [ "Utility" "TextEditor" ]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,79 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
programs.neovim.plugins = with pkgs.vimPlugins; [ |
||||
|
# LSP |
||||
|
{ |
||||
|
plugin = nvim-lspconfig; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
local lspconfig = require('lspconfig') |
||||
|
|
||||
|
function add_lsp(binary, server, options) |
||||
|
options["cmd"] = { binary } |
||||
|
if vim.fn.executable(binary) == 1 then server.setup(options) end |
||||
|
end |
||||
|
|
||||
|
add_lsp("docker-langserver", lspconfig.dockerls, {}) |
||||
|
add_lsp("bash-language-server", lspconfig.bashls, {}) |
||||
|
add_lsp("clangd", lspconfig.clangd, {}) |
||||
|
add_lsp("nil", lspconfig.nil_ls, {}) |
||||
|
add_lsp("pylsp", lspconfig.pylsp, {}) |
||||
|
add_lsp("dart", lspconfig.dartls, {}) |
||||
|
add_lsp("haskell-language-server", lspconfig.hls, {}) |
||||
|
add_lsp("kotlin-language-server", lspconfig.kotlin_language_server, {}) |
||||
|
add_lsp("solargraph", lspconfig.solargraph, {}) |
||||
|
add_lsp("phpactor", lspconfig.phpactor, {}) |
||||
|
add_lsp("terraform-ls", lspconfig.terraformls, {}) |
||||
|
add_lsp("texlab", lspconfig.texlab, {}) |
||||
|
add_lsp("gopls", lspconfig.gopls, {}) |
||||
|
add_lsp("tsserver", lspconfig.tsserver, {}) |
||||
|
add_lsp("lua-lsp", lspconfig.lua_ls, {}) |
||||
|
add_lsp("jdt-language-server", lspconfig.jdtls, {}) |
||||
|
add_lsp("texlab", lspconfig.texlab, { |
||||
|
chktex = { |
||||
|
onEdit = true, |
||||
|
onOpenAndSave = true |
||||
|
} |
||||
|
}) |
||||
|
add_lsp("ltex-ls", lspconfig.ltex, {}) |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = rust-tools-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
local rust_tools = require('rust-tools') |
||||
|
if vim.fn.executable("rust-analyzer") == 1 then |
||||
|
rust_tools.setup{ tools = { autoSetHints = true } } |
||||
|
end |
||||
|
vim.api.nvim_set_hl(0, '@lsp.type.comment.rust', {}) |
||||
|
''; |
||||
|
} |
||||
|
|
||||
|
# Completions |
||||
|
cmp-nvim-lsp |
||||
|
cmp-buffer |
||||
|
lspkind-nvim |
||||
|
{ |
||||
|
plugin = nvim-cmp; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
local cmp = require('cmp') |
||||
|
|
||||
|
cmp.setup{ |
||||
|
formatting = { format = require('lspkind').cmp_format() }, |
||||
|
-- Same keybinds as vim's vanilla completion |
||||
|
mapping = { |
||||
|
['<C-n>'] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), |
||||
|
['<C-p>'] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), |
||||
|
['<C-e>'] = cmp.mapping.close(), |
||||
|
['<C-y>'] = cmp.mapping.confirm(), |
||||
|
}, |
||||
|
sources = { |
||||
|
{ name='buffer', option = { get_bufnrs = vim.api.nvim_list_bufs } }, |
||||
|
{ name='nvim_lsp' }, |
||||
|
}, |
||||
|
} |
||||
|
''; |
||||
|
} |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
{ pkgs, config, lib, ... }: { |
||||
|
programs.neovim = { |
||||
|
extraConfig = /* vim */ lib.mkAfter '' |
||||
|
function SetCustomKeywords() |
||||
|
syn match Todo /TODO/ |
||||
|
syn match Done /DONE/ |
||||
|
syn match Start /START/ |
||||
|
syn match End /END/ |
||||
|
endfunction |
||||
|
|
||||
|
autocmd Syntax * call SetCustomKeywords() |
||||
|
''; |
||||
|
plugins = with pkgs.vimPlugins; [ |
||||
|
rust-vim |
||||
|
dart-vim-plugin |
||||
|
plantuml-syntax |
||||
|
vim-markdown |
||||
|
vim-nix |
||||
|
vim-toml |
||||
|
vim-syntax-shakespeare |
||||
|
gemini-vim-syntax |
||||
|
kotlin-vim |
||||
|
haskell-vim |
||||
|
mermaid-vim |
||||
|
pgsql-vim |
||||
|
vim-terraform |
||||
|
vim-jsx-typescript |
||||
|
vim-caddyfile |
||||
|
|
||||
|
{ |
||||
|
plugin = vimtex; |
||||
|
config = |
||||
|
let |
||||
|
method = |
||||
|
if config.programs.zathura.enable |
||||
|
then "zathura" |
||||
|
else "general"; |
||||
|
in |
||||
|
'' |
||||
|
let g:vimtex_view_method = '${method}' |
||||
|
''; |
||||
|
} |
||||
|
|
||||
|
# Tree sitter |
||||
|
{ |
||||
|
plugin = nvim-treesitter.withAllGrammars; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('nvim-treesitter.configs').setup{ |
||||
|
highlight = { |
||||
|
enable = true, |
||||
|
additional_vim_regex_highlighting = false, |
||||
|
}, |
||||
|
} |
||||
|
''; |
||||
|
} |
||||
|
]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,329 @@ |
|||||
|
scheme: |
||||
|
let c = scheme.colors; |
||||
|
in /* vim */ '' |
||||
|
let g:colors_name="nix-${scheme.slug}" |
||||
|
|
||||
|
set termguicolors |
||||
|
|
||||
|
if exists("syntax_on") |
||||
|
syntax reset |
||||
|
endif |
||||
|
|
||||
|
hi clear |
||||
|
|
||||
|
hi Normal guifg=#${c.base05} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi Bold guifg=NONE guibg=NONE gui=bold guisp=NONE |
||||
|
hi Debug guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Directory guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Error guifg=#${c.base00} guibg=#${c.base08} gui=NONE guisp=NONE |
||||
|
hi ErrorMsg guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi Exception guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi FoldColumn guifg=#${c.base0C} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi Folded guifg=#${c.base03} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi IncSearch guifg=#${c.base01} guibg=#${c.base09} gui=NONE guisp=NONE |
||||
|
hi Italic guifg=NONE guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Macro guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi MatchParen guifg=NONE guibg=#${c.base03} gui=NONE guisp=NONE |
||||
|
hi ModeMsg guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi MoreMsg guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Question guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Search guifg=#${c.base01} guibg=#${c.base0A} gui=NONE guisp=NONE |
||||
|
hi Substitute guifg=#${c.base01} guibg=#${c.base0A} gui=NONE guisp=NONE |
||||
|
hi SpecialKey guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TooLong guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Underlined guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Visual guifg=NONE guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi VisualNOS guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi WarningMsg guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi WildMenu guifg=#${c.base08} guibg=#${c.base0A} gui=NONE guisp=NONE |
||||
|
hi Title guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Conceal guifg=#${c.base0D} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi Cursor guifg=#${c.base00} guibg=#${c.base05} gui=NONE guisp=NONE |
||||
|
hi NonText guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi LineNr guifg=#${c.base04} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi SignColumn guifg=#${c.base04} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi StatusLine guifg=#${c.base0B} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi StatusLineNC guifg=#${c.base04} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi VertSplit guifg=#${c.base01} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi ColorColumn guifg=NONE guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi CursorColumn guifg=NONE guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi CursorLine guifg=NONE guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi CursorLineNr guifg=#${c.base0B} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi QuickFixLine guifg=NONE guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi PMenu guifg=#${c.base05} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi PMenuSel guifg=#${c.base01} guibg=#${c.base05} gui=NONE guisp=NONE |
||||
|
hi TabLine guifg=#${c.base03} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi TabLineFill guifg=#${c.base03} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi TabLineSel guifg=#${c.base0B} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi EndOfBuffer guifg=#${c.base00} guibg=NONE gui=NONE guisp=NONE |
||||
|
|
||||
|
hi Boolean guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Character guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Comment guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Conditional guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Constant guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Define guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Delimiter guifg=#${c.base0F} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Float guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Function guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Identifier guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Include guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Keyword guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Label guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Number guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Operator guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi PreProc guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Repeat guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Special guifg=#${c.base0C} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi SpecialChar guifg=#${c.base0F} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Statement guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi StorageClass guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi String guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Structure guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Tag guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Type guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi Typedef guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
|
||||
|
hi Todo guifg=#${c.base01} guibg=#${c.base0A} gui=NONE guisp=NONE |
||||
|
hi Done guifg=#${c.base01} guibg=#${c.base0B} gui=NONE guisp=NONE |
||||
|
hi Start guifg=#${c.base01} guibg=#${c.base0D} gui=NONE guisp=NONE |
||||
|
hi End guifg=#${c.base01} guibg=#${c.base0E} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi DiffAdd guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffChange guifg=#${c.base03} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffDelete guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffText guifg=#${c.base0D} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffAdded guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffFile guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffNewFile guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffLine guifg=#${c.base0D} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi DiffRemoved guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi gitcommitOverflow guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitSummary guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitComment guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitUntracked guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitDiscarded guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitSelected guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitHeader guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitSelectedType guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitUnmergedType guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitDiscardedType guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitBranch guifg=#${c.base09} guibg=NONE gui=bold guisp=NONE |
||||
|
hi gitcommitUntrackedFile guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi gitcommitUnmergedFile guifg=#${c.base08} guibg=NONE gui=bold guisp=NONE |
||||
|
hi gitcommitDiscardedFile guifg=#${c.base08} guibg=NONE gui=bold guisp=NONE |
||||
|
hi gitcommitSelectedFile guifg=#${c.base0B} guibg=NONE gui=bold guisp=NONE |
||||
|
|
||||
|
hi GitGutterAdd guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi GitGutterChange guifg=#${c.base0D} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi GitGutterDelete guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi GitGutterChangeDelete guifg=#${c.base0E} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi SpellBad guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base08} |
||||
|
hi SpellLocal guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0C} |
||||
|
hi SpellCap guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0D} |
||||
|
hi SpellRare guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0E} |
||||
|
|
||||
|
hi DiagnosticError guifg=#${c.base08} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi DiagnosticWarn guifg=#${c.base0E} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi DiagnosticInfo guifg=#${c.base05} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi DiagnosticHint guifg=#${c.base0C} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi DiagnosticUnderlineError guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base08} |
||||
|
hi DiagnosticUnderlineWarning guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0E} |
||||
|
hi DiagnosticUnderlineWarn guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0E} |
||||
|
hi DiagnosticUnderlineInformation guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0F} |
||||
|
hi DiagnosticUnderlineHint guifg=NONE guibg=NONE gui=undercurl guisp=#${c.base0C} |
||||
|
|
||||
|
hi LspReferenceText guifg=NONE guibg=NONE gui=underline guisp=#${c.base04} |
||||
|
hi LspReferenceRead guifg=NONE guibg=NONE gui=underline guisp=#${c.base04} |
||||
|
hi LspReferenceWrite guifg=NONE guibg=NONE gui=underline guisp=#${c.base04} |
||||
|
|
||||
|
hi link LspDiagnosticsDefaultError DiagnosticError |
||||
|
hi link LspDiagnosticsDefaultWarning DiagnosticWarn |
||||
|
hi link LspDiagnosticsDefaultInformation DiagnosticInfo |
||||
|
hi link LspDiagnosticsDefaultHint DiagnosticHint |
||||
|
hi link LspDiagnosticsUnderlineError DiagnosticUnderlineError |
||||
|
hi link LspDiagnosticsUnderlineWarning DiagnosticUnderlineWarning |
||||
|
hi link LspDiagnosticsUnderlineInformation DiagnosticUnderlineInformation |
||||
|
hi link LspDiagnosticsUnderlineHint DiagnosticUnderlineHint |
||||
|
|
||||
|
hi TSAnnotation guifg=#${c.base0F} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSAttribute guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSBoolean guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSCharacter guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSComment guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
hi TSConstructor guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSConditional guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSConstant guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSConstBuiltin guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
hi TSConstMacro guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSError guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSException guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSField guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSFloat guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSFunction guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSFuncBuiltin guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
hi TSFuncMacro guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSInclude guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSKeyword guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSKeywordFunction guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSKeywordOperator guifg=#${c.base0E} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSLabel guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSMethod guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSNamespace guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSNone guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSNumber guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSOperator guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSParameter guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSParameterReference guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSProperty guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSPunctDelimiter guifg=#${c.base0F} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSPunctBracket guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSPunctSpecial guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSRepeat guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSString guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSStringRegex guifg=#${c.base0C} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSStringEscape guifg=#${c.base0C} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSSymbol guifg=#${c.base0B} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSTag guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSTagDelimiter guifg=#${c.base0F} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSText guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSStrong guifg=NONE guibg=NONE gui=bold guisp=NONE |
||||
|
hi TSEmphasis guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
hi TSUnderline guifg=#${c.base00} guibg=NONE gui=underline guisp=NONE |
||||
|
hi TSStrike guifg=#${c.base00} guibg=NONE gui=strikethrough guisp=NONE |
||||
|
hi TSTitle guifg=#${c.base0D} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSLiteral guifg=#${c.base09} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSURI guifg=#${c.base09} guibg=NONE gui=underline guisp=NONE |
||||
|
hi TSType guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSTypeBuiltin guifg=#${c.base0A} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
hi TSVariable guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi TSVariableBuiltin guifg=#${c.base08} guibg=NONE gui=NONE guisp=NONE "was italic |
||||
|
|
||||
|
hi TSDefinition guifg=NONE guibg=NONE gui=underline guisp=#${c.base04} |
||||
|
hi TSDefinitionUsage guifg=NONE guibg=NONE gui=underline guisp=#${c.base04} |
||||
|
hi TSCurrentScope guifg=NONE guibg=NONE gui=bold guisp=NONE |
||||
|
if has('nvim-0.8.0') |
||||
|
highlight! link @annotation TSAnnotation |
||||
|
highlight! link @attribute TSAttribute |
||||
|
highlight! link @boolean TSBoolean |
||||
|
highlight! link @character TSCharacter |
||||
|
highlight! link @comment TSComment |
||||
|
highlight! link @conditional TSConditional |
||||
|
highlight! link @constant TSConstant |
||||
|
highlight! link @constant.builtin TSConstBuiltin |
||||
|
highlight! link @constant.macro TSConstMacro |
||||
|
highlight! link @constructor TSConstructor |
||||
|
highlight! link @exception TSException |
||||
|
highlight! link @field TSField |
||||
|
highlight! link @float TSFloat |
||||
|
highlight! link @function TSFunction |
||||
|
highlight! link @function.builtin TSFuncBuiltin |
||||
|
highlight! link @function.macro TSFuncMacro |
||||
|
highlight! link @include TSInclude |
||||
|
highlight! link @keyword TSKeyword |
||||
|
highlight! link @keyword.function TSKeywordFunction |
||||
|
highlight! link @keyword.operator TSKeywordOperator |
||||
|
highlight! link @label TSLabel |
||||
|
highlight! link @method TSMethod |
||||
|
highlight! link @namespace TSNamespace |
||||
|
highlight! link @none TSNone |
||||
|
highlight! link @number TSNumber |
||||
|
highlight! link @operator TSOperator |
||||
|
highlight! link @parameter TSParameter |
||||
|
highlight! link @parameter.reference TSParameterReference |
||||
|
highlight! link @property TSProperty |
||||
|
highlight! link @punctuation.bracket TSPunctBracket |
||||
|
highlight! link @punctuation.delimiter TSPunctDelimiter |
||||
|
highlight! link @punctuation.special TSPunctSpecial |
||||
|
highlight! link @repeat TSRepeat |
||||
|
highlight! link @storageclass TSStorageClass |
||||
|
highlight! link @string TSString |
||||
|
highlight! link @string.escape TSStringEscape |
||||
|
highlight! link @string.regex TSStringRegex |
||||
|
highlight! link @symbol TSSymbol |
||||
|
highlight! link @tag TSTag |
||||
|
highlight! link @tag.delimiter TSTagDelimiter |
||||
|
highlight! link @text TSText |
||||
|
highlight! link @strike TSStrike |
||||
|
highlight! link @math TSMath |
||||
|
highlight! link @type TSType |
||||
|
highlight! link @type.builtin TSTypeBuiltin |
||||
|
highlight! link @uri TSURI |
||||
|
highlight! link @variable TSVariable |
||||
|
highlight! link @variable.builtin TSVariableBuiltin |
||||
|
endif |
||||
|
|
||||
|
hi IndentBlankLine guifg=#${c.base01} guibg=NONE gui=NONE guisp=NONE |
||||
|
|
||||
|
hi NvimTreeNormal guifg=#${c.base05} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi CmpItemAbbr guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi CmpItemAbbrDeprecated guifg=#${c.base03} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi CmpItemAbbrMatch guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi CmpItemAbbrMatchFuzzy guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi CmpItemKind guifg=#${c.base0C} guibg=NONE gui=NONE guisp=NONE |
||||
|
hi CmpItemMenu guifg=#${c.base05} guibg=NONE gui=NONE guisp=NONE |
||||
|
|
||||
|
hi BufferCurrent guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferCurrentIndex guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferCurrentMod guifg=#${c.base0E} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferCurrentSign guifg=#${c.base0B} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferCurrentTarget guifg=#${c.base08} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferCurrentIcon guifg=NONE guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi BufferVisible guifg=#${c.base0A} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferVisibleIndex guifg=#${c.base0A} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferVisibleMod guifg=#${c.base0E} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferVisibleSign guifg=#${c.base0A} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferVisibleTarget guifg=#${c.base08} guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferVisibleIcon guifg=NONE guibg=#${c.base01} gui=NONE guisp=NONE |
||||
|
hi BufferInactive guifg=#${c.base04} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferInactiveIndex guifg=#${c.base05} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferInactiveMod guifg=#${c.base0E} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferInactiveSign guifg=#${c.base05} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferInactiveTarget guifg=#${c.base08} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferInactiveIcon guifg=NONE guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferTabpages guifg=#${c.base03} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi BufferTabpageFill guifg=#${c.base03} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi NvimInternalError guifg=#${c.base00} guibg=#${c.base08} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi NormalFloat guifg=#${c.base05} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi FloatBorder guifg=#${c.base05} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi NormalNC guifg=#${c.base05} guibg=#${c.base00} gui=NONE guisp=NONE |
||||
|
hi TermCursor guifg=#${c.base00} guibg=#${c.base05} gui=NONE guisp=NONE |
||||
|
hi TermCursorNC guifg=#${c.base00} guibg=#${c.base05} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi User1 guifg=#${c.base08} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User2 guifg=#${c.base0E} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User3 guifg=#${c.base05} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User4 guifg=#${c.base0C} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User5 guifg=#${c.base01} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User6 guifg=#${c.base05} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User7 guifg=#${c.base05} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User8 guifg=#${c.base00} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
hi User9 guifg=#${c.base00} guibg=#${c.base02} gui=NONE guisp=NONE |
||||
|
|
||||
|
hi TreesitterContext guifg=NONE guibg=#${c.base01} gui=NONE guisp=NONE "was italic |
||||
|
|
||||
|
let g:terminal_color_background = "#${c.base00}" |
||||
|
let g:terminal_color_foreground = "#${c.base05}" |
||||
|
|
||||
|
let g:terminal_color_0 = "#${c.base00}" |
||||
|
let g:terminal_color_1 = "#${c.base08}" |
||||
|
let g:terminal_color_2 = "#${c.base0B}" |
||||
|
let g:terminal_color_3 = "#${c.base0A}" |
||||
|
let g:terminal_color_4 = "#${c.base0D}" |
||||
|
let g:terminal_color_5 = "#${c.base0E}" |
||||
|
let g:terminal_color_6 = "#${c.base0C}" |
||||
|
let g:terminal_color_7 = "#${c.base05}" |
||||
|
let g:terminal_color_8 = "#${c.base03}" |
||||
|
let g:terminal_color_9 = "#${c.base08}" |
||||
|
let g:terminal_color_10 = "#${c.base0B}" |
||||
|
let g:terminal_color_11 = "#${c.base0A}" |
||||
|
let g:terminal_color_12 = "#${c.base0D}" |
||||
|
let g:terminal_color_13 = "#${c.base0E}" |
||||
|
let g:terminal_color_14 = "#${c.base0C}" |
||||
|
let g:terminal_color_15 = "#${c.base07}" |
||||
|
'' |
||||
@ -0,0 +1,128 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
programs.neovim.plugins = with pkgs.vimPlugins; [ |
||||
|
# UI |
||||
|
vim-illuminate |
||||
|
vim-numbertoggle |
||||
|
# vim-markology |
||||
|
{ |
||||
|
plugin = vim-fugitive; |
||||
|
type = "viml"; |
||||
|
config = /* vim */ '' |
||||
|
nmap <space>G :Git<CR> |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = nvim-bqf; |
||||
|
type = "lua"; |
||||
|
config = /* lua * */ '' |
||||
|
require('bqf').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = alpha-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
local alpha = require("alpha") |
||||
|
local dashboard = require("alpha.themes.dashboard") |
||||
|
|
||||
|
dashboard.section.header.val = { |
||||
|
" ", |
||||
|
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ", |
||||
|
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ", |
||||
|
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ", |
||||
|
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ", |
||||
|
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ", |
||||
|
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ", |
||||
|
" ", |
||||
|
} |
||||
|
dashboard.section.header.opts.hl = "Title" |
||||
|
|
||||
|
dashboard.section.buttons.val = { |
||||
|
dashboard.button( "n", " New file" , ":enew<CR>"), |
||||
|
dashboard.button( "e", " Explore", ":Explore<CR>"), |
||||
|
dashboard.button( "g", " Git summary", ":Git | :only<CR>"), |
||||
|
dashboard.button( "c", " Nix config flake" , ":cd ~/Documents/NixConfig | :e flake.nix<CR>"), |
||||
|
dashboard.button( "q", " Quit nvim", ":qa<CR>"), |
||||
|
} |
||||
|
|
||||
|
alpha.setup(dashboard.opts) |
||||
|
vim.keymap.set("n", "<space>a", ":Alpha<CR>", { desc = "Open alpha dashboard" }) |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = bufferline-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('bufferline').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = scope-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('scope').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = which-key-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('which-key').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = range-highlight-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('range-highlight').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = indent-blankline-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('indent_blankline').setup{char_highlight_list={'IndentBlankLine'}} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = nvim-web-devicons; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('nvim-web-devicons').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = gitsigns-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('gitsigns').setup{ |
||||
|
signs = { |
||||
|
add = { text = '+' }, |
||||
|
change = { text = '~' }, |
||||
|
delete = { text = '_' }, |
||||
|
topdelete = { text = '‾' }, |
||||
|
changedelete = { text = '~' }, |
||||
|
}, |
||||
|
} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = nvim-colorizer-lua; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('colorizer').setup{} |
||||
|
''; |
||||
|
} |
||||
|
{ |
||||
|
plugin = fidget-nvim; |
||||
|
type = "lua"; |
||||
|
config = /* lua */ '' |
||||
|
require('fidget').setup{ |
||||
|
text = { |
||||
|
spinner = "dots", |
||||
|
}, |
||||
|
} |
||||
|
''; |
||||
|
} |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
{ pkgs, config, ... }: { |
||||
|
programs.password-store = { |
||||
|
enable = true; |
||||
|
settings = { PASSWORD_STORE_DIR = "$HOME/.password-store"; }; |
||||
|
package = pkgs.pass.withExtensions (p: [ p.pass-otp ]); |
||||
|
}; |
||||
|
|
||||
|
services.pass-secret-service = { |
||||
|
enable = true; |
||||
|
storePath = "${config.home.homeDirectory}/.password-store"; |
||||
|
extraArgs = [ "-e${config.programs.password-store.package}/bin/pass" ]; |
||||
|
}; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ ".password-store" ]; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
{ |
||||
|
imports = [ |
||||
|
./khal.nix |
||||
|
./khard.nix |
||||
|
./todoman.nix |
||||
|
./vdirsyncer.nix |
||||
|
|
||||
|
./mail.nix |
||||
|
./neomutt.nix |
||||
|
|
||||
|
# Pass feature is required |
||||
|
../pass |
||||
|
]; |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
|
||||
@ -0,0 +1,14 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ khal ]; |
||||
|
xdg.configFile."khal/config".text = '' |
||||
|
[calendars] |
||||
|
|
||||
|
[[calendars]] |
||||
|
path = ~/Calendars/* |
||||
|
type = discover |
||||
|
|
||||
|
[locale] |
||||
|
timeformat = %H:%M |
||||
|
dateformat = %d/%m/%Y |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ khard ]; |
||||
|
xdg.configFile."khard/khard.conf".text = '' |
||||
|
[addressbooks] |
||||
|
[[contacts]] |
||||
|
path = ~/Contacts/Main |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,120 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
|
||||
|
let |
||||
|
mbsync = "${config.programs.mbsync.package}/bin/mbsync"; |
||||
|
pass = "${config.programs.password-store.package}/bin/pass"; |
||||
|
|
||||
|
common = rec { |
||||
|
realName = "Gabriel Fontes"; |
||||
|
gpg = { |
||||
|
key = "7088 C742 1873 E0DB 97FF 17C2 245C AB70 B4C2 25E9"; |
||||
|
signByDefault = true; |
||||
|
}; |
||||
|
signature = { |
||||
|
showSignature = "append"; |
||||
|
text = '' |
||||
|
${realName} |
||||
|
|
||||
|
https://gsfontes.com |
||||
|
PGP: ${gpg.key} |
||||
|
''; |
||||
|
}; |
||||
|
}; |
||||
|
in |
||||
|
{ |
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = [ "Mail" ]; |
||||
|
}; |
||||
|
|
||||
|
accounts.email = { |
||||
|
maildirBasePath = "Mail"; |
||||
|
accounts = { |
||||
|
personal = rec { |
||||
|
primary = true; |
||||
|
address = "hi@m7.rs"; |
||||
|
aliases = ["gabriel@gsfontes.com" "eu@misterio.me"]; |
||||
|
passwordCommand = "${pass} ${smtp.host}/${address}"; |
||||
|
|
||||
|
imap.host = "mail.m7.rs"; |
||||
|
mbsync = { |
||||
|
enable = true; |
||||
|
create = "maildir"; |
||||
|
expunge = "both"; |
||||
|
}; |
||||
|
folders = { |
||||
|
inbox = "Inbox"; |
||||
|
drafts = "Drafts"; |
||||
|
sent = "Sent"; |
||||
|
trash = "Trash"; |
||||
|
}; |
||||
|
neomutt = { |
||||
|
enable = true; |
||||
|
extraMailboxes = [ "Archive" "Drafts" "Junk" "Sent" "Trash" ]; |
||||
|
}; |
||||
|
|
||||
|
msmtp.enable = true; |
||||
|
smtp.host = "mail.m7.rs"; |
||||
|
userName = address; |
||||
|
} // common; |
||||
|
|
||||
|
college = rec { |
||||
|
address = "g.fontes@usp.br"; |
||||
|
passwordCommand = "${pass} ${smtp.host}/${address}"; |
||||
|
|
||||
|
msmtp.enable = true; |
||||
|
smtp.host = "smtp.gmail.com"; |
||||
|
userName = address; |
||||
|
} // common; |
||||
|
|
||||
|
zoocha = rec { |
||||
|
address = "gabriel@zoocha.com"; |
||||
|
passwordCommand = "${pass} ${smtp.host}/${address}"; |
||||
|
|
||||
|
/* TODO: add imap (conditionally) |
||||
|
imap.host = "imap.gmail.com"; |
||||
|
mbsync = { |
||||
|
enable = true; |
||||
|
create = "maildir"; |
||||
|
expunge = "both"; |
||||
|
}; |
||||
|
folders = { |
||||
|
inbox = "INBOX"; |
||||
|
trash = "Trash"; |
||||
|
}; |
||||
|
neomutt = { |
||||
|
enable = true; |
||||
|
}; |
||||
|
*/ |
||||
|
|
||||
|
msmtp.enable = true; |
||||
|
smtp.host = "smtp.gmail.com"; |
||||
|
userName = address; |
||||
|
} // common; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
programs.mbsync.enable = true; |
||||
|
programs.msmtp.enable = true; |
||||
|
|
||||
|
systemd.user.services.mbsync = { |
||||
|
Unit = { Description = "mbsync synchronization"; }; |
||||
|
Service = |
||||
|
let gpgCmds = import ../cli/gpg-commands.nix { inherit pkgs; }; |
||||
|
in |
||||
|
{ |
||||
|
Type = "oneshot"; |
||||
|
ExecCondition = '' |
||||
|
/bin/sh -c "${gpgCmds.isUnlocked}" |
||||
|
''; |
||||
|
ExecStart = "${mbsync} -a"; |
||||
|
}; |
||||
|
}; |
||||
|
systemd.user.timers.mbsync = { |
||||
|
Unit = { Description = "Automatic mbsync synchronization"; }; |
||||
|
Timer = { |
||||
|
OnBootSec = "30"; |
||||
|
OnUnitActiveSec = "5m"; |
||||
|
}; |
||||
|
Install = { WantedBy = [ "timers.target" ]; }; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,230 @@ |
|||||
|
{ config, pkgs, lib, ... }: { |
||||
|
xdg = { |
||||
|
desktopEntries = { |
||||
|
neomutt = { |
||||
|
name = "Neomutt"; |
||||
|
genericName = "Email Client"; |
||||
|
comment = "Read and send emails"; |
||||
|
exec = "neomutt %U"; |
||||
|
icon = "mutt"; |
||||
|
terminal = true; |
||||
|
categories = [ "Network" "Email" "ConsoleOnly" ]; |
||||
|
type = "Application"; |
||||
|
mimeType = [ "x-scheme-handler/mailto" ]; |
||||
|
}; |
||||
|
}; |
||||
|
mimeApps.defaultApplications = { |
||||
|
"x-scheme-handler/mailto" = "neomutt.desktop"; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
programs.neomutt = { |
||||
|
enable = true; |
||||
|
vimKeys = true; |
||||
|
checkStatsInterval = 60; |
||||
|
sidebar = { |
||||
|
enable = true; |
||||
|
width = 30; |
||||
|
}; |
||||
|
settings = { |
||||
|
mark_old = "no"; |
||||
|
text_flowed = "yes"; |
||||
|
reverse_name = "yes"; |
||||
|
query_command = ''"khard email --parsable '%s'"''; |
||||
|
}; |
||||
|
binds = [ |
||||
|
{ |
||||
|
action = "sidebar-toggle-visible"; |
||||
|
key = "\\\\"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = "group-reply"; |
||||
|
key = "L"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = "toggle-new"; |
||||
|
key = "B"; |
||||
|
map = [ "index" ]; |
||||
|
} |
||||
|
]; |
||||
|
macros = |
||||
|
let |
||||
|
browserpipe = |
||||
|
"cat /dev/stdin > /tmp/muttmail.html && xdg-open /tmp/muttmail.html"; |
||||
|
in |
||||
|
[ |
||||
|
{ |
||||
|
action = "<sidebar-next><sidebar-open>"; |
||||
|
key = "J"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = "<sidebar-prev><sidebar-open>"; |
||||
|
key = "K"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = |
||||
|
":set confirmappend=no\\n<save-message>+Archive<enter>:set confirmappend=yes\\n"; |
||||
|
key = "A"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = "<pipe-entry>${browserpipe}<enter><exit>"; |
||||
|
key = "V"; |
||||
|
map = [ "attach" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = "<pipe-message>${pkgs.urlscan}/bin/urlscan<enter><exit>"; |
||||
|
key = "F"; |
||||
|
map = [ "pager" ]; |
||||
|
} |
||||
|
{ |
||||
|
action = |
||||
|
"<view-attachments><search>html<enter><pipe-entry>${browserpipe}<enter><exit>"; |
||||
|
key = "V"; |
||||
|
map = [ "index" "pager" ]; |
||||
|
} |
||||
|
]; |
||||
|
extraConfig = let |
||||
|
# Collect all addresses and aliases |
||||
|
addresses = lib.flatten (lib.mapAttrsToList (n: v: [ v.address ] ++ v.aliases) config.accounts.email.accounts); |
||||
|
in '' |
||||
|
alternates "${lib.concatStringsSep "|" addresses}" |
||||
|
'' + '' |
||||
|
# From: https://github.com/altercation/mutt-colors-solarized/blob/master/mutt-colors-solarized-dark-16.muttrc |
||||
|
|
||||
|
# basic colors --------------------------------------------------------- |
||||
|
color normal brightyellow default |
||||
|
color error red default |
||||
|
color tilde black default |
||||
|
color message cyan default |
||||
|
color markers red white |
||||
|
color attachment white default |
||||
|
color search brightmagenta default |
||||
|
color status brightyellow black |
||||
|
color indicator brightblack yellow |
||||
|
color tree cyan default # arrow in threads |
||||
|
|
||||
|
# basic monocolor screen |
||||
|
mono bold bold |
||||
|
mono underline underline |
||||
|
mono indicator reverse |
||||
|
mono error bold |
||||
|
|
||||
|
# index ---------------------------------------------------------------- |
||||
|
|
||||
|
color index red default "~A" # all messages |
||||
|
color index blue default "~N" # new messages |
||||
|
color index brightred default "~E" # expired messages |
||||
|
color index blue default "~N" # new messages |
||||
|
color index blue default "~O" # old messages |
||||
|
color index brightmagenta default "~Q" # messages that have been replied to |
||||
|
color index brightgreen default "~R" # read messages |
||||
|
color index blue default "~U" # unread messages |
||||
|
color index blue default "~U~$" # unread, unreferenced messages |
||||
|
color index cyan default "~v" # messages part of a collapsed thread |
||||
|
color index magenta default "~P" # messages from me |
||||
|
color index cyan default "~p!~F" # messages to me |
||||
|
color index cyan default "~N~p!~F" # new messages to me |
||||
|
color index cyan default "~U~p!~F" # unread messages to me |
||||
|
color index brightgreen default "~R~p!~F" # messages to me |
||||
|
color index red default "~F" # flagged messages |
||||
|
color index red default "~F~p" # flagged messages to me |
||||
|
color index red default "~N~F" # new flagged messages |
||||
|
color index red default "~N~F~p" # new flagged messages to me |
||||
|
color index red default "~U~F~p" # new flagged messages to me |
||||
|
color index brightcyan default "~v~(!~N)" # collapsed thread with no unread |
||||
|
color index yellow default "~v~(~N)" # collapsed thread with some unread |
||||
|
color index green default "~N~v~(~N)" # collapsed thread with unread parent |
||||
|
color index red black "~v~(~F)!~N" # collapsed thread with flagged, no unread |
||||
|
color index yellow black "~v~(~F~N)" # collapsed thread with some unread & flagged |
||||
|
color index green black "~N~v~(~F~N)" # collapsed thread with unread parent & flagged |
||||
|
color index green black "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged |
||||
|
color index cyan black "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly |
||||
|
color index yellow red "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial) |
||||
|
color index yellow default "~(~N)" # messages in threads with some unread |
||||
|
color index green default "~S" # superseded messages |
||||
|
color index black red "~D" # deleted messages |
||||
|
color index black red "~N~D" # deleted messages |
||||
|
color index red default "~T" # tagged messages |
||||
|
|
||||
|
# message headers ------------------------------------------------------ |
||||
|
|
||||
|
color hdrdefault brightgreen default |
||||
|
color header brightyellow default "^(From)" |
||||
|
color header blue default "^(Subject)" |
||||
|
|
||||
|
# body ----------------------------------------------------------------- |
||||
|
|
||||
|
color quoted blue default |
||||
|
color quoted1 cyan default |
||||
|
color quoted2 yellow default |
||||
|
color quoted3 red default |
||||
|
color quoted4 brightred default |
||||
|
|
||||
|
color signature brightgreen default |
||||
|
color bold black default |
||||
|
color underline black default |
||||
|
color normal default default |
||||
|
color body brightcyan default "[;:][-o][)/(|]" # emoticons |
||||
|
color body brightcyan default "[;:][)(|]" # emoticons |
||||
|
color body brightcyan default "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\ |
||||
|
|FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\ |
||||
|
|IRL|RTFM|ROTFL|ROFL|YMMV)[*]?" |
||||
|
color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon? |
||||
|
color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon? |
||||
|
|
||||
|
## pgp |
||||
|
|
||||
|
color body red default "(BAD signature)" |
||||
|
color body cyan default "(Good signature)" |
||||
|
color body brightblack default "^gpg: Good signature .*" |
||||
|
color body brightyellow default "^gpg: " |
||||
|
color body brightyellow red "^gpg: BAD signature from.*" |
||||
|
mono body bold "^gpg: Good signature" |
||||
|
mono body bold "^gpg: BAD signature from.*" |
||||
|
|
||||
|
# yes, an insance URL regex |
||||
|
color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" |
||||
|
# and a heavy handed email regex |
||||
|
color body magenta default "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" |
||||
|
|
||||
|
# Various smilies and the like |
||||
|
color body brightwhite default "<[Gg]>" # <g> |
||||
|
color body brightwhite default "<[Bb][Gg]>" # <bg> |
||||
|
color body yellow default " [;:]-*[})>{(<|]" # :-) etc... |
||||
|
# *bold* |
||||
|
color body blue default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" |
||||
|
mono body bold "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" |
||||
|
# _underline_ |
||||
|
color body blue default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" |
||||
|
mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" |
||||
|
# /italic/ (Sometimes gets directory names) |
||||
|
color body blue default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" |
||||
|
mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" |
||||
|
|
||||
|
# Border lines. |
||||
|
color body blue default "( *[-+=#*~_]){6,}" |
||||
|
|
||||
|
# From https://github.com/jessfraz/dockerfiles/blob/master/mutt/.mutt/mutt-patch-highlighting.muttrc |
||||
|
color body cyan default ^(Signed-off-by).* |
||||
|
color body cyan default ^(Docker-DCO-1.1-Signed-off-by).* |
||||
|
color body brightwhite default ^(Cc) |
||||
|
color body yellow default "^diff \-.*" |
||||
|
color body brightwhite default "^index [a-f0-9].*" |
||||
|
color body brightblue default "^---$" |
||||
|
color body white default "^\-\-\- .*" |
||||
|
color body white default "^[\+]{3} .*" |
||||
|
color body green default "^[\+][^\+]+.*" |
||||
|
color body red default "^\-[^\-]+.*" |
||||
|
color body brightblue default "^@@ .*" |
||||
|
color body green default "LGTM" |
||||
|
color body brightmagenta default "-- Commit Summary --" |
||||
|
color body brightmagenta default "-- File Changes --" |
||||
|
color body brightmagenta default "-- Patch Links --" |
||||
|
''; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
{ pkgs, ... }: { |
||||
|
home.packages = with pkgs; [ todoman ]; |
||||
|
xdg.configFile."todoman/config.py".text = '' |
||||
|
path = "~/Calendars/*" |
||||
|
default_list = "Personal" |
||||
|
date_format = "%d/%m/%Y" |
||||
|
time_format = "%H:%M" |
||||
|
humanize = True |
||||
|
default_due = 0 |
||||
|
''; |
||||
|
} |
||||
@ -0,0 +1,74 @@ |
|||||
|
{ pkgs, lib, config, ... }: |
||||
|
let |
||||
|
pass = "${config.programs.password-store.package}/bin/pass"; |
||||
|
in |
||||
|
{ |
||||
|
home.packages = with pkgs; [ vdirsyncer ]; |
||||
|
|
||||
|
home.persistence = { |
||||
|
"/persist/home/misterio".directories = |
||||
|
[ "Calendars" "Contacts" ".local/share/vdirsyncer" ]; |
||||
|
}; |
||||
|
|
||||
|
xdg.configFile."vdirsyncer/config".text = '' |
||||
|
[general] |
||||
|
status_path = "~/.local/share/vdirsyncer/status" |
||||
|
|
||||
|
[pair contacts] |
||||
|
a = "contacts_local" |
||||
|
b = "contacts_remote" |
||||
|
collections = ["from a", "from b"] |
||||
|
conflict_resolution = "b wins" |
||||
|
|
||||
|
[storage contacts_local] |
||||
|
type = "filesystem" |
||||
|
path = "~/Contacts" |
||||
|
fileext = ".vcf" |
||||
|
|
||||
|
[storage contacts_remote] |
||||
|
type = "carddav" |
||||
|
url = "https://dav.m7.rs" |
||||
|
username = "hi@m7.rs" |
||||
|
password.fetch = ["command", "${pass}", "mail.m7.rs/hi@m7.rs"] |
||||
|
|
||||
|
[pair calendars] |
||||
|
a = "calendars_local" |
||||
|
b = "calendars_remote" |
||||
|
collections = ["from a", "from b"] |
||||
|
metadata = ["color"] |
||||
|
conflict_resolution = "b wins" |
||||
|
|
||||
|
[storage calendars_local] |
||||
|
type = "filesystem" |
||||
|
path = "~/Calendars" |
||||
|
fileext = ".ics" |
||||
|
|
||||
|
[storage calendars_remote] |
||||
|
type = "caldav" |
||||
|
url = "https://dav.m7.rs" |
||||
|
username = "hi@m7.rs" |
||||
|
password.fetch = ["command", "${pass}", "mail.m7.rs/hi@m7.rs"] |
||||
|
''; |
||||
|
|
||||
|
systemd.user.services.vdirsyncer = { |
||||
|
Unit = { Description = "vdirsyncer synchronization"; }; |
||||
|
Service = |
||||
|
let gpgCmds = import ../cli/gpg-commands.nix { inherit pkgs; }; |
||||
|
in |
||||
|
{ |
||||
|
Type = "oneshot"; |
||||
|
ExecCondition = '' |
||||
|
/bin/sh -c "${gpgCmds.isUnlocked}" |
||||
|
''; |
||||
|
ExecStart = "${pkgs.vdirsyncer}/bin/vdirsyncer sync"; |
||||
|
}; |
||||
|
}; |
||||
|
systemd.user.timers.vdirsyncer = { |
||||
|
Unit = { Description = "Automatic vdirsyncer synchronization"; }; |
||||
|
Timer = { |
||||
|
OnBootSec = "30"; |
||||
|
OnUnitActiveSec = "5m"; |
||||
|
}; |
||||
|
Install = { WantedBy = [ "timers.target" ]; }; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
{ config, ... }: |
||||
|
let inherit (config.colorscheme) colors; |
||||
|
in { |
||||
|
services.rgbdaemon = { |
||||
|
enable = true; |
||||
|
daemons = { |
||||
|
swayLock = true; |
||||
|
mute = true; |
||||
|
player = true; |
||||
|
}; |
||||
|
colors = { |
||||
|
background = "${colors.base00}"; |
||||
|
foreground = "${colors.base05}"; |
||||
|
secondary = "${colors.base0B}"; |
||||
|
tertiary = "${colors.base0E}"; |
||||
|
quaternary = "${colors.base05}"; |
||||
|
}; |
||||
|
keyboard = { |
||||
|
device = "/dev/input/ckb1/cmd"; |
||||
|
highlighted = [ "h" "j" "k" "l" "w" "a" "s" "d" "m3" "g11" "profswitch" "lwin" "rwin" ]; |
||||
|
}; |
||||
|
mouse = { |
||||
|
device = "/dev/input/ckb2/cmd"; |
||||
|
dpi = 750; |
||||
|
highlighted = [ "wheel" "thumb" ]; |
||||
|
}; |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
{ lib, ... }: |
||||
|
{ |
||||
|
imports = [ ./global ]; |
||||
|
# Disable impermanence |
||||
|
home.persistence = lib.mkForce { }; |
||||
|
} |
||||
@ -0,0 +1,77 @@ |
|||||
|
{ inputs, lib, pkgs, config, outputs, ... }: |
||||
|
let |
||||
|
inherit (inputs.nix-colors) colorSchemes; |
||||
|
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) colorschemeFromPicture nixWallpaperFromScheme; |
||||
|
in |
||||
|
{ |
||||
|
imports = [ |
||||
|
inputs.impermanence.nixosModules.home-manager.impermanence |
||||
|
inputs.nix-colors.homeManagerModule |
||||
|
../features/cli |
||||
|
../features/nvim |
||||
|
../features/helix |
||||
|
] ++ (builtins.attrValues outputs.homeManagerModules); |
||||
|
|
||||
|
nixpkgs = { |
||||
|
overlays = builtins.attrValues outputs.overlays; |
||||
|
config = { |
||||
|
allowUnfree = true; |
||||
|
allowUnfreePredicate = (_: true); |
||||
|
# FIXME |
||||
|
permittedInsecurePackages = [ |
||||
|
"openssl-1.1.1u" |
||||
|
]; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
nix = { |
||||
|
package = lib.mkDefault pkgs.nix; |
||||
|
settings = { |
||||
|
experimental-features = [ "nix-command" "flakes" "repl-flake" ]; |
||||
|
warn-dirty = false; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
systemd.user.startServices = "sd-switch"; |
||||
|
|
||||
|
programs = { |
||||
|
home-manager.enable = true; |
||||
|
git.enable = true; |
||||
|
}; |
||||
|
|
||||
|
home = { |
||||
|
username = lib.mkDefault "misterio"; |
||||
|
homeDirectory = lib.mkDefault "/home/${config.home.username}"; |
||||
|
stateVersion = lib.mkDefault "22.05"; |
||||
|
sessionPath = [ "$HOME/.local/bin" ]; |
||||
|
|
||||
|
persistence = { |
||||
|
"/persist/home/misterio" = { |
||||
|
directories = [ |
||||
|
"Documents" |
||||
|
"Downloads" |
||||
|
"Pictures" |
||||
|
"Videos" |
||||
|
".local/bin" |
||||
|
]; |
||||
|
allowOther = true; |
||||
|
}; |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
colorscheme = lib.mkDefault colorSchemes.dracula; |
||||
|
wallpaper = |
||||
|
let |
||||
|
largest = f: xs: builtins.head (builtins.sort (a: b: a > b) (map f xs)); |
||||
|
largestWidth = largest (x: x.width) config.monitors; |
||||
|
largestHeight = largest (x: x.height) config.monitors; |
||||
|
in |
||||
|
lib.mkDefault (nixWallpaperFromScheme |
||||
|
{ |
||||
|
scheme = config.colorscheme; |
||||
|
width = largestWidth; |
||||
|
height = largestHeight; |
||||
|
logoScale = 4; |
||||
|
}); |
||||
|
home.file.".colorscheme".text = config.colorscheme.slug; |
||||
|
} |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
imports = [ ./global ]; |
||||
|
} |
||||
@ -0,0 +1,4 @@ |
|||||
|
{ inputs, ... }: { |
||||
|
imports = [ ./global ]; |
||||
|
colorscheme = inputs.nix-colors.colorSchemes.nord; |
||||
|
} |
||||
@ -0,0 +1,246 @@ |
|||||
|
-----BEGIN PGP PUBLIC KEY BLOCK----- |
||||
|
Comment: 7088 C742 1873 E0DB 97FF 17C2 245C AB70 B4C2 25E9 |
||||
|
Comment: Gabriel Fontes <hi@m7.rs> |
||||
|
Comment: Gabriel Fontes <gabriel@gsfontes.com> |
||||
|
Comment: Gabriel Fontes <eu@misterio.me> |
||||
|
Comment: Gabriel Fontes <g.fontes@usp.br> |
||||
|
Comment: Gabriel Fontes <gabriel@gelos.club> |
||||
|
Comment: Gabriel Fontes <gabriel.fontes@uget.express> |
||||
|
Comment: Gabriel Fontes <gabriel@zoocha.com> |
||||
|
|
||||
|
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 |
||||
|
hE153xNWk2EOBnLil7/HLhWR2huCZO1DPozhJyz7suh9FGuIj/wA0X6Z8c4J7rXg |
||||
|
Hr0ZPm7YutvEFIYtrOlcTcTKmIVxBGwEQ98W9YW0WKn64z3WKJX3BHjwNBIQL8xF |
||||
|
BBXnEEOhUwIfdblpLXEmU58EO2kHM7ksMUGlkNPuajj0XCnzjRUil+hPEhL3FYQS |
||||
|
9xirCzvyji2yrZ1bWj0qnxeGZx4/akXN3a6m3MPOTEKOxNnPDOs497spKusU3l4F |
||||
|
wWDKnhHPdYz5kdIPOfOBwipLDWFQOoWIa6/mvuWCKQ8X4Hp0meiBFsDaSGvU9OE/ |
||||
|
NqJj44RSnB/IWPLsDZnDYdIFhVuZYIlQ5cES3h3ACdae0oF6PqzK8x+iJTNMtdae |
||||
|
AmNZyFEpues3iwLcuwZlFyO8hn9HNZsQnBDhyJPksWwqw736KJQH/OKv10X1ZHdz |
||||
|
wGItcLm0LEdhYnJpZWwgRm9udGVzIDxnYWJyaWVsLmZvbnRlc0B1Z2V0LmV4cHJl |
||||
|
c3M+iQHOBBMBCgA4FiEEcIjHQhhz4NuX/xfCJFyrcLTCJekFAmINnmECGwMFCwkI |
||||
|
BwIGFQoJCAsCBBYCAwECHgECF4AACgkQJFyrcLTCJek47QwAgmOJJooPLzraZN3s |
||||
|
RKeOHOQIo7IYZI8MOCTE26rS9lkypDVgICo/wj/pIjei1yukaRo7wNkpWE0jWtj/ |
||||
|
DlcwnxbSzhVAXPQ2XdPO81kZ8VKBFoT3+7eGl44UsIjHruKjcjvfoXPNtW0m+o8a |
||||
|
QdFE2WYqZIPJj2N7b4Ah5NrFs7g0yfWHzSpjTekYvBMFhOXa7Jqbz0lyn8JhlwqE |
||||
|
hlAHJ0hf4bMm3jG83IBfcdAcEatj+3uPRzrmj6/fxvxP9GNNN+lO16UhDbafkI7c |
||||
|
jumVMeOKn5fEz4HbuGMHwnrORvdwhGOBcl7sO39A9uCjvN/wtM3EdUsQ/TWq2bB0 |
||||
|
6vqBU3e3oLMB2O+xsE8HLMCoMuHOkwkqMv/qUSMlnx5k4vYa1eC1LqEy9zWcr+Gc |
||||
|
SGNZfMby14Gp9zsuSiGOoHhTczWa4ut48N6Gn2949lRKCoyPrGdxafXI0tpx0KB7 |
||||
|
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 |
||||
|
LyE= |
||||
|
=UHEm |
||||
|
-----END PGP PUBLIC KEY BLOCK----- |
||||
@ -0,0 +1,21 @@ |
|||||
|
{ inputs, outputs, ... }: |
||||
|
{ |
||||
|
imports = [ |
||||
|
./global |
||||
|
./features/desktop/hyprland |
||||
|
./features/desktop/wireless |
||||
|
./features/productivity |
||||
|
./features/pass |
||||
|
./features/games |
||||
|
]; |
||||
|
|
||||
|
wallpaper = outputs.wallpapers.aenami-lunar; |
||||
|
colorscheme = inputs.nix-colors.colorSchemes.atelier-heath; |
||||
|
|
||||
|
monitors = [{ |
||||
|
name = "eDP-1"; |
||||
|
width = 1920; |
||||
|
height = 1080; |
||||
|
workspace = "1"; |
||||
|
}]; |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDci4wJghnRRSqQuX1z2xeaUR+p/muKzac0jw0mgpXE2T/3iVlMJJ3UXJ+tIbySP6ezt0GVmzejNOvUarPAm0tOcW6W0Ejys2Tj+HBRU19rcnUtf4vsKk8r5PW5MnwS8DqZonP5eEbhW2OrX5ZsVyDT+Bqrf39p3kOyWYLXT2wA7y928g8FcXOZjwjTaWGWtA+BxAvbJgXhU9cl/y45kF69rfmc3uOQmeXpKNyOlTk6ipSrOfJkcHgNFFeLnxhJ7rYxpoXnxbObGhaNqn7gc5mt+ek+fwFzZ8j6QSKFsPr0NzwTFG80IbyiyrnC/MeRNh7SQFPAESIEP8LK3PoNx2l1M+MjCQXsb4oIG2oYYMRa2yx8qZ3npUOzMYOkJFY1uI/UEE/j/PlQSzMHfpmWus4o2sijfr8OmVPGeoU/UnVPyINqHhyAd1d3Iji3y3LMVemHtp5wVcuswABC7IRVVKZYrMCXMiycY5n00ch6XTaXBwCY00y8B3Mzkd7Ofq98YHc= hi@m7.rs |
||||
@ -0,0 +1,9 @@ |
|||||
|
builtins.listToAttrs (map |
||||
|
(wallpaper: { |
||||
|
inherit (wallpaper) name; |
||||
|
value = builtins.fetchurl { |
||||
|
inherit (wallpaper) sha256; |
||||
|
url = "https://i.imgur.com/${wallpaper.id}.${wallpaper.ext}"; |
||||
|
}; |
||||
|
}) |
||||
|
(builtins.fromJSON (builtins.readFile ./list.json))) |
||||
@ -0,0 +1,23 @@ |
|||||
|
#!/usr/bin/env -S nix shell nixpkgs#httpie nixpkgs#jq --command bash |
||||
|
|
||||
|
function fetch_image() { |
||||
|
jq -n \ |
||||
|
--arg name "$(echo $1 | cut -d '|' -f 1)" \ |
||||
|
--arg ext "$(echo $1 | cut -d '|' -f 2 | cut -d '/' -f 2)" \ |
||||
|
--arg id "$(echo $1 | cut -d '|' -f 3)" \ |
||||
|
--arg sha256 "$(nix-prefetch-url https://i.imgur.com/$id.$ext)" \ |
||||
|
'{"name": $name, "ext": $ext, "id": $id, "sha256": $sha256}' |
||||
|
} |
||||
|
|
||||
|
album="bXDPRpV" # https://imgur.com/a/bXDPRpV |
||||
|
clientid="0c2b2b57cdbe5d8" |
||||
|
|
||||
|
result=$(https api.imgur.com/3/album/$album Authorization:"Client-ID $clientid") |
||||
|
images=$(echo $result | jq -r '.data.images[] | "\(.description)|\(.type)|\(.id)"') |
||||
|
|
||||
|
echo "[" |
||||
|
while read -r image; do |
||||
|
fetch_image $image |
||||
|
done <<< "$images" |
||||
|
wait |
||||
|
echo "]" |
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue