Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d10b195c7e
|
||
|
|
119148c764
|
+2
-2
@@ -9,5 +9,5 @@ creation_rules:
|
|||||||
- "age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a" # laptop-user-doloro
|
- "age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a" # laptop-user-doloro
|
||||||
- "age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq" # laptop-system
|
- "age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq" # laptop-system
|
||||||
- "age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05" # rpi5
|
- "age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05" # rpi5
|
||||||
- "age15mxdhlvk7zxtqlw06cu29zdzk9jxjfgvx9s335wxyyk5r7wr9pvqv9894t" # laptop-surface-user-doloro
|
- "age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv" # laptop-surface-user-doloro
|
||||||
- "age129rxje3pr8w5ulgszgmt98kt4kr06kdwhsg9js78sjte878ngf5qealch2" # laptop-surface-system
|
- "age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp" # laptop-surface-system
|
||||||
|
|||||||
@@ -1,144 +0,0 @@
|
|||||||
# Doloro's Dotfiles
|
|
||||||
|
|
||||||
NixOS dotfiles managed via **flake-parts** + **den** (custom flake framework). Multi-host: desktop, laptop, WSL, RPi5 server.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
dotfiles/
|
|
||||||
├── flake.nix # Entry point: `outputs = inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config);`
|
|
||||||
├── .sops.yaml # Age-encrypted secrets (6 keys: desktop/laptop user+system, rpi5)
|
|
||||||
├── config/
|
|
||||||
│ ├── dendritic.nix # Root config import
|
|
||||||
│ ├── inputs.nix # Flake input definitions
|
|
||||||
│ ├── namespace.nix # Namespace setup
|
|
||||||
│ ├── defaults.nix # Default values
|
|
||||||
│ ├── hosts/
|
|
||||||
│ │ ├── computers.nix # desktop (x86_64), laptop (aarch64), wsl (aarch64), doloro-bootable
|
|
||||||
│ │ ├── servers.nix # rpi5 (aarch64)
|
|
||||||
│ │ └── aspects/ # Host-specific configurations
|
|
||||||
│ │ ├── doloro-shared.nix # Common to all doloro hosts (nixvim, tmux, git, ssh, hyfetch)
|
|
||||||
│ │ ├── doloro-desktop/ # Desktop-specific (disko, hardware, home, host)
|
|
||||||
│ │ ├── doloro-laptop/ # Laptop-specific (disko, hardware, home, host, power-management)
|
|
||||||
│ │ ├── doloro-wsl/ # WSL-specific (home, host)
|
|
||||||
│ │ ├── doloro-bootable/ # Bootable USB (home, host)
|
|
||||||
│ │ └── servers/rpi5.nix # Raspberry Pi 5
|
|
||||||
│ └── modules/ # Reusable configuration modules
|
|
||||||
│ ├── ai/ # AI tools (pi-coding-agent, OpenMeteo)
|
|
||||||
│ ├── gaming/ # Steam, gamemode, gamepad
|
|
||||||
│ ├── hyprland/ # Window manager
|
|
||||||
│ ├── niri/ # Alternative WM
|
|
||||||
│ ├── nixvim/ # Neovim config
|
|
||||||
│ ├── power-management/ # TLP, auto-cpufreq, battery targets
|
|
||||||
│ ├── secrets/ # SOPS-managed secrets
|
|
||||||
│ ├── services/ # Caddy, DDNS, Home Assistant, Traefik, RTMP
|
|
||||||
│ └── ...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Hosts
|
|
||||||
|
|
||||||
| Host | Arch | Type | Key Modules |
|
|
||||||
| ------ | ------ | ------ | ------------- |
|
|
||||||
| `desktop` | x86_64 | NixOS + HM | Hyprland, gaming, disko, full stack |
|
|
||||||
| `laptop` | aarch64 | NixOS + HM | Power management, Hyprland |
|
|
||||||
| `wsl` | aarch64 | NixOS | WSL setup |
|
|
||||||
| `doloro-bootable` | x86_64 | NixOS | Bootable USB recovery |
|
|
||||||
| `rpi5` | aarch64 | NixOS | Server, no GUI |
|
|
||||||
|
|
||||||
## Key Tools & Stack
|
|
||||||
|
|
||||||
- **Window Manager**: Hyprland (primary), Niri (alternative)
|
|
||||||
- **Editor**: Nixvim (Neovim) — Gruvbox Material, LSP (rust-analyzer, nixd, tsserver), Treesitter, Lualine, Telescope, LazyGit
|
|
||||||
- **Shell**: Fish
|
|
||||||
- **AI**: Pi Coding Agent v0.81.1 (LiteLLM via `scuggo` proxy)
|
|
||||||
- Models: meow (litellm), claude-opus-4-8, gpt-5.5, gpt-5.4-mini (recap/title)
|
|
||||||
- Skills: pi-lens, pi-lean-ctx, pi-vitals, pi-spark, pi-caveman, pi-pretty, pi-context-engineering
|
|
||||||
- **Terminal**: Kitty
|
|
||||||
- **Browser**: Zen Browser, Helium
|
|
||||||
- **Music**: Spicetify (Spotify)
|
|
||||||
- **Aurora**: Stylix (themes), NixOS-Hardware
|
|
||||||
- **Container**: Podman
|
|
||||||
- **Flatpak**: nix-flatpak
|
|
||||||
- **Secrets**: SOPS + Age (6 keys for desktop/laptop user+system, rpi5)
|
|
||||||
- **Nerd Fonts**: Custom patched (Doloro1978/nix-nerd-fonts-patcher)
|
|
||||||
|
|
||||||
## Conventions
|
|
||||||
|
|
||||||
1. **Never edit `flake.nix` directly** — run `nix run .#write-flake` to regenerate
|
|
||||||
2. **Secrets** live in `config/modules/secrets/` — encrypted via SOPS age keys in `.sops.yaml`
|
|
||||||
3. **Modules** are modular: split by concern (ai, gaming, hyprland, power-management, services)
|
|
||||||
4. **Hosts** split into `computers.nix` and `servers.nix` — each host gets `aspect` references
|
|
||||||
5. **Shared config** lives in `doloro-shared.nix` — imported by all doloro hosts
|
|
||||||
6. **Disko** handles disk layouts for desktop/laptop
|
|
||||||
7. **Power management** is laptop-specific: TLP, auto-cpufreq, battery AC targets, Intel GPU, TDP
|
|
||||||
8. **CachyOS kernel** available as module for desktop
|
|
||||||
|
|
||||||
## Common Operations
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Apply configuration
|
|
||||||
sudo nixos-rebuild switch --flake .#desktop
|
|
||||||
|
|
||||||
# Home Manager (doloro user)
|
|
||||||
home-manager switch --flake .#doloro-desktop
|
|
||||||
|
|
||||||
# Update flake inputs
|
|
||||||
nix flake update
|
|
||||||
|
|
||||||
# Write regenerated flake.nix
|
|
||||||
nix run .#write-flake
|
|
||||||
|
|
||||||
# Encrypt a secret
|
|
||||||
nix run .#sops-encrypt <file>
|
|
||||||
|
|
||||||
# Enter development shell
|
|
||||||
nix develop
|
|
||||||
```
|
|
||||||
|
|
||||||
## Validating Config Changes
|
|
||||||
|
|
||||||
Standard validation sequence before relying on any edit to a `.nix` module (used for opencode, ai, and other module changes):
|
|
||||||
|
|
||||||
1. **Parse check** (fast, catches syntax/brace errors):
|
|
||||||
```bash
|
|
||||||
nix-instantiate --parse config/modules/ai/ai.nix >/dev/null && echo "PARSE OK"
|
|
||||||
```
|
|
||||||
2. **Hash verification** for any downloaded file pinned via `pkgs.fetchurl` — compute the sha256 locally and confirm it matches the `sha256` in the module:
|
|
||||||
```bash
|
|
||||||
nix hash file token-tracker.tsx # or: sha256sum token-tracker.tsx
|
|
||||||
```
|
|
||||||
3. **Flake evaluation** — full `nix flake check` may fail on unrelated pre-existing issues (e.g. `<den/primary-user>` not on NIX_PATH in pure mode). Distinguish pre-existing failures from edit-induced ones before touching the code. `nix flake show --impure` lists the configuration names (`nixosConfigurations: desktop, doloro-bootable, laptop, rpi5, wsl`).
|
|
||||||
4. **Runtime output check** — the generated config is a home-manager symlink into `/nix/store`. After a rebuild, confirm the live files actually contain the change:
|
|
||||||
```bash
|
|
||||||
readlink -f ~/.config/opencode/opencode.json # → /nix/store/...-opencode.json
|
|
||||||
rg -n "my-change" "$(readlink -f ~/.config/opencode/opencode.json)"
|
|
||||||
```
|
|
||||||
Also verify supporting files that the change depends on (plugins dir, extra packages, etc.):
|
|
||||||
```bash
|
|
||||||
ls -la ~/.config/opencode/plugins/ && readlink -f ~/.config/opencode/plugins/*.tsx
|
|
||||||
```
|
|
||||||
5. **Cache check** for npm-resolved opencode plugins — confirm opencode actually downloaded the package into its plugin cache:
|
|
||||||
```bash
|
|
||||||
ls ~/.cache/opencode/packages/ | rg "plugin-name"
|
|
||||||
```
|
|
||||||
If the package is absent or an old version, the plugin won't load regardless of config.
|
|
||||||
6. **Log check** — search opencode's log for plugin-load errors, filtering out your own tool-call noise:
|
|
||||||
```bash
|
|
||||||
rg -i "plugin" ~/.local/share/opencode/log/opencode.log | rg -v "evaluated permission" | tail -30
|
|
||||||
```
|
|
||||||
7. **Config is loaded once at startup** — a running opencode session keeps the config it loaded at launch. After changing any config file, restart opencode (and run a home-manager rebuild first) before expecting the change to take effect.
|
|
||||||
|
|
||||||
## Important Notes
|
|
||||||
|
|
||||||
- `allowUnfree = true` globally for proprietary packages (Steam, Spotify, etc.)
|
|
||||||
- Multiple cachix substitutes configured for speed (hyprland, nix-community, niri, raspberrypi, cuda)
|
|
||||||
- Pi coding agent uses `scuggo` LiteLLM proxy at `https://9f5db439.fwds.scug.io`
|
|
||||||
- API key via env var `$SCUG_IO_API_KEY`
|
|
||||||
- WSL host uses `nixos-wsl` flake input
|
|
||||||
- RPi5 uses `nixos-raspberrypi` and `raspberry-pi-nix`
|
|
||||||
|
|
||||||
## File Rules
|
|
||||||
|
|
||||||
- `.gitignore`: exclude `nix/result`, `result`, `nvim`, `tmux/plugins`, `modules/quickshell/quickshell/.qmlls.ini`
|
|
||||||
- `.new` file exists (empty) — likely a marker
|
|
||||||
- `.claude/` directory present (Claude Code config)
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
den.aspects.doloro-bootable = {
|
|
||||||
includes = [
|
|
||||||
<den/primary-user>
|
|
||||||
den.aspects.doloro-shared
|
|
||||||
modules.nixvim
|
|
||||||
];
|
|
||||||
homeManager = {
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
btrfs-progs
|
|
||||||
chntpw
|
|
||||||
ddrescue
|
|
||||||
fd
|
|
||||||
gpart
|
|
||||||
ntfs3g
|
|
||||||
parted
|
|
||||||
ranger
|
|
||||||
rsync
|
|
||||||
testdisk
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
{ den, modules, ... }:
|
|
||||||
{
|
|
||||||
den.aspects.doloro-bootable = {
|
|
||||||
nixos = {
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
networking.hostName = "doloro-recovery";
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
services.openssh.enable = true;
|
|
||||||
|
|
||||||
boot.loader.grub.enable = true;
|
|
||||||
boot.loader.grub.device = "/dev/sda";
|
|
||||||
boot.loader.grub.efiSupport = true;
|
|
||||||
boot.loader.grub.efiInstallAsRemovable = true;
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [
|
|
||||||
"ata_piix"
|
|
||||||
"uhci_hcd"
|
|
||||||
"ehci_pci"
|
|
||||||
"xen_blkfront"
|
|
||||||
"sr_mod"
|
|
||||||
"nvme"
|
|
||||||
"virtio_pci"
|
|
||||||
"virtio_scsi"
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = "/dev/disk/by-label/nixos";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
btrfs-progs
|
|
||||||
btop
|
|
||||||
chntpw
|
|
||||||
ddrescue
|
|
||||||
e2fsprogs
|
|
||||||
fastfetch
|
|
||||||
fd
|
|
||||||
gpart
|
|
||||||
git
|
|
||||||
ntfs3g
|
|
||||||
parted
|
|
||||||
pavucontrol
|
|
||||||
pciutils
|
|
||||||
ranger
|
|
||||||
rsync
|
|
||||||
testdisk
|
|
||||||
util-linux
|
|
||||||
wl-clipboard
|
|
||||||
];
|
|
||||||
|
|
||||||
users.users.doloro = {
|
|
||||||
isNormalUser = true;
|
|
||||||
group = "doloro";
|
|
||||||
extraGroups = [ "wheel" "networkmanager" ];
|
|
||||||
initialPassword = "recovery";
|
|
||||||
};
|
|
||||||
|
|
||||||
users.groups.doloro = {};
|
|
||||||
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
|
||||||
|
|
||||||
services.getty.autologinUser = "doloro";
|
|
||||||
systemd.services."getty@tty1".enable = false;
|
|
||||||
systemd.services."autovt@tty1".enable = false;
|
|
||||||
|
|
||||||
services.xserver.enable = false;
|
|
||||||
|
|
||||||
system.stateVersion = "25.11";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -11,93 +11,58 @@
|
|||||||
<den/primary-user>
|
<den/primary-user>
|
||||||
den.aspects.doloro-shared
|
den.aspects.doloro-shared
|
||||||
modules.sops
|
modules.sops
|
||||||
modules.flatpaks
|
|
||||||
modules.gamemode
|
|
||||||
modules.gameaudio
|
|
||||||
modules.hyprland
|
modules.hyprland
|
||||||
modules.fish
|
modules.fish
|
||||||
modules.tuigreet
|
modules.tuigreet
|
||||||
modules.kitty
|
modules.kitty
|
||||||
modules.nikpkgs
|
|
||||||
modules.fonts
|
modules.fonts
|
||||||
modules.unity
|
|
||||||
modules.printing
|
|
||||||
<modules/hyprland/doloro-settings>
|
<modules/hyprland/doloro-settings>
|
||||||
(modules.obs {
|
(modules.obs {
|
||||||
audio = true;
|
audio = true;
|
||||||
autostart = true;
|
autostart = true;
|
||||||
})
|
})
|
||||||
<modules/common/gaming>
|
<modules/common/gaming>
|
||||||
modules.hytale-launcher
|
|
||||||
# modules.helium
|
# modules.helium
|
||||||
(<modules/helium> {
|
(<modules/helium> {
|
||||||
default = true;
|
default = true;
|
||||||
})
|
})
|
||||||
# modules.niri # Testing
|
# modules.niri # Testing
|
||||||
modules.stylix
|
modules.stylix
|
||||||
# modules.quickshell
|
modules.quickshell
|
||||||
modules.barbar
|
|
||||||
modules.nix-ld
|
modules.nix-ld
|
||||||
modules.spotify
|
modules.spotify
|
||||||
# modules.easyeffects
|
modules.easyeffects
|
||||||
# modules.lavd
|
modules.lavd
|
||||||
<modules/ai/secrets>
|
modules.ai
|
||||||
# modules.ai
|
<modules/ai/ollama-cuda>
|
||||||
modules.pi-coding # inactive: swapped to opencode
|
|
||||||
# modules.omp
|
|
||||||
modules.podman
|
|
||||||
modules.wivrn
|
|
||||||
# <modules/ai/ollama-cuda>
|
|
||||||
];
|
];
|
||||||
nixos =
|
nixos =
|
||||||
{
|
{ config, pkgs, ... }:
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
{
|
||||||
users.users.doloro = {
|
users.users.doloro = {
|
||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
|
hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
|
||||||
extraGroups = [
|
|
||||||
"libvirtd"
|
|
||||||
"gamemode"
|
|
||||||
"dialout"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
# Register GSettings schemas so GTK/GLib apps (orca-slicer) can find
|
|
||||||
# them; without this GLib aborts with "No GSettings schemas are
|
|
||||||
# installed on the system" on non-GNOME desktops.
|
|
||||||
programs.dconf.enable = true;
|
|
||||||
virtualisation.libvirtd.enable = false;
|
|
||||||
# virtualisation.waydroid.enable = true;
|
|
||||||
# # Newer kernel versions may need
|
|
||||||
# virtualisation.waydroid.package = pkgs.waydroid-nftables;
|
|
||||||
programs.virt-manager.enable = false;
|
|
||||||
};
|
};
|
||||||
homeManager =
|
homeManager =
|
||||||
|
{ home, pkgs, ... }:
|
||||||
{
|
{
|
||||||
home,
|
wayland.windowManager.hyprland.settings = {
|
||||||
pkgs,
|
monitor = [
|
||||||
...
|
"HDMI-A-1, 1920x1080@60, 0x0, 1"
|
||||||
}:
|
"DP-3, 1920x1080@144, 1920x0, 1"
|
||||||
{
|
];
|
||||||
xdg.configFile."hypr/hyprland-local.lua" = {
|
exec-once = [
|
||||||
text = ''
|
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
|
||||||
-- Host overrides (desktop): pin workspaces to monitors.
|
];
|
||||||
-- HDMI-A-1 (left) shows workspace 1, DP-2 (right) shows workspace 2.
|
workspace = [
|
||||||
hl.workspace_rule({ workspace = "name:1", monitor = "HDMI-A-1" })
|
"name:2, monitor:DP-3"
|
||||||
hl.workspace_rule({ workspace = "name:2", monitor = "DP-2" })
|
];
|
||||||
|
input = {
|
||||||
-- Autostart (workspace placement applies only to these spawned windows)
|
kb_layout = "gb";
|
||||||
hl.on("hyprland.start", function()
|
follow_mouse = 2;
|
||||||
hl.exec_cmd("steam", { workspace = "6 silent" })
|
sensitivity = -0.5;
|
||||||
hl.exec_cmd("telegram-desktop", { workspace = "8 silent" })
|
};
|
||||||
hl.exec_cmd("equibop", { workspace = "8 silent" })
|
|
||||||
hl.exec_cmd("spotify", { workspace = "9 silent" })
|
|
||||||
hl.exec_cmd("obs", { workspace = "10 silent" })
|
|
||||||
end)
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
equibop
|
equibop
|
||||||
@@ -105,54 +70,11 @@
|
|||||||
obsidian
|
obsidian
|
||||||
# pear-desktop
|
# pear-desktop
|
||||||
prismlauncher
|
prismlauncher
|
||||||
# deadlock-mod-manager
|
deadlock-mod-manager
|
||||||
inputs.grimoire.packages.x86_64-linux.grimoire
|
gamescope
|
||||||
# gamescope
|
|
||||||
android-studio
|
android-studio
|
||||||
blender
|
|
||||||
qbittorrent
|
|
||||||
mpv
|
|
||||||
krita
|
|
||||||
clang
|
|
||||||
mold
|
|
||||||
# (tetrio-desktop.override { withTetrioPlus = true; })
|
|
||||||
# bottles
|
|
||||||
# orca-slicer's wrapGAppsHook does not actually wrap the installed
|
|
||||||
# binary, so neither the GSettings schema path nor the NVIDIA/zink
|
|
||||||
# workaround env from `withNvidiaGLWorkaround` reach the process.
|
|
||||||
# Wrap it ourselves: prepend the gtk3 + gsettings-desktop schema dirs
|
|
||||||
# to XDG_DATA_DIRS (fixes "No GSettings schemas are installed on the
|
|
||||||
# system") and set the zink GL workaround explicitly.
|
|
||||||
(pkgs.symlinkJoin {
|
|
||||||
name = "orca-slicer";
|
|
||||||
paths = [ (pkgs.orca-slicer.override { withNvidiaGLWorkaround = true; }) ];
|
|
||||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/orca-slicer \
|
|
||||||
--prefix XDG_DATA_DIRS : "${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" \
|
|
||||||
--set __GLX_VENDOR_LIBRARY_NAME mesa \
|
|
||||||
--set __EGL_VENDOR_LIBRARY_FILENAMES /run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json \
|
|
||||||
--set MESA_LOADER_DRIVER_OVERRIDE zink \
|
|
||||||
--set GALLIUM_DRIVER zink \
|
|
||||||
--set WEBKIT_DISABLE_DMABUF_RENDERER 1
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
# prusa-slicer
|
|
||||||
];
|
|
||||||
programs.lutris.enable = true;
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
# Skipping tests while upstream sorts it out, revert once
|
|
||||||
# Hydra consistently builds openldap green.
|
|
||||||
# (final: prev: {
|
|
||||||
# openldap = prev.openldap.overrideAttrs (_: {
|
|
||||||
# doCheck = false;
|
|
||||||
# });
|
|
||||||
# })
|
|
||||||
];
|
];
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
nixpkgs.config.problems.handlers = {
|
|
||||||
tetrio-plus.broken = "warn";
|
|
||||||
};
|
|
||||||
programs.home-manager.enable = true;
|
programs.home-manager.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,11 +13,7 @@
|
|||||||
modules.nix
|
modules.nix
|
||||||
];
|
];
|
||||||
nixos =
|
nixos =
|
||||||
{
|
{ pkgs, config, ... }:
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
{
|
||||||
boot.loader.grub.enable = true;
|
boot.loader.grub.enable = true;
|
||||||
boot.loader.grub.device = "nodev";
|
boot.loader.grub.device = "nodev";
|
||||||
@@ -40,34 +36,13 @@
|
|||||||
|
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
configPackages = [ pkgs.xdg-desktop-portal-wlr ];
|
|
||||||
wlr = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.networkmanager.enable = true;
|
networking.networkmanager.enable = true;
|
||||||
networking.firewall.enable = false;
|
networking.firewall.enable = false;
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [ polkit_gnome ];
|
|
||||||
|
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
security.polkit.enable = true;
|
|
||||||
|
|
||||||
hardware.graphics = {
|
hardware.graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
|
||||||
libva-minimal
|
|
||||||
vulkan-loader
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.sessionVariables = {
|
|
||||||
LIBVA_DRIVER_NAME = "nvidia";
|
|
||||||
NVD_BACKEND = "direct";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
@@ -87,6 +62,7 @@
|
|||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
|
|
||||||
# Modesetting is required.
|
# Modesetting is required.
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
|
|
||||||
@@ -94,7 +70,7 @@
|
|||||||
# Enable this if you have graphical corruption issues or application crashes after waking
|
# Enable this if you have graphical corruption issues or application crashes after waking
|
||||||
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
||||||
# of just the bare essentials.
|
# of just the bare essentials.
|
||||||
powerManagement.enable = false;
|
powerManagement.enable = true;
|
||||||
|
|
||||||
# Fine-grained power management. Turns off GPU when not in use.
|
# Fine-grained power management. Turns off GPU when not in use.
|
||||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||||
@@ -116,30 +92,7 @@
|
|||||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
};
|
};
|
||||||
swapDevices = [
|
|
||||||
{
|
|
||||||
device = "/swapfile";
|
|
||||||
size = 8192;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.binfmt.emulatedSystems = [
|
|
||||||
"aarch64-linux"
|
|
||||||
];
|
|
||||||
# services.scx = {
|
|
||||||
# enable = true;
|
|
||||||
# package = pkgs.scx.rustscheds;
|
|
||||||
# };
|
|
||||||
# systemd.services.scx.environment = {
|
|
||||||
# SCX_SCHEDULER_OVERRIDE = "scx_lavd";
|
|
||||||
# SCX_FLAGS_OVERRIDE = "--performance --no-core-compaction";
|
|
||||||
# };
|
|
||||||
systemd.oomd = {
|
|
||||||
enable = true;
|
|
||||||
enableUserSlices = true;
|
|
||||||
enableRootSlice = true;
|
|
||||||
enableSystemSlice = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
disko.devices = {
|
disko.devices = {
|
||||||
disk = {
|
disk = {
|
||||||
main = {
|
main = {
|
||||||
device = "/dev/disk/by-id/nvme-MZ9L4256HCJQ-00BMV-SAMSUNG_S69VNF1X404046";
|
device = "/dev/nvme0n1";
|
||||||
type = "disk";
|
type = "disk";
|
||||||
content = {
|
content = {
|
||||||
type = "gpt";
|
type = "gpt";
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
plainSwap = {
|
plainSwap = {
|
||||||
size = "16G";
|
size = "24G";
|
||||||
content = {
|
content = {
|
||||||
type = "swap";
|
type = "swap";
|
||||||
discardPolicy = "both"; # Both "once" and page discard policies
|
discardPolicy = "both"; # Both "once" and page discard policies
|
||||||
|
|||||||
@@ -14,16 +14,13 @@
|
|||||||
<modules/hyprland/doloro-settings>
|
<modules/hyprland/doloro-settings>
|
||||||
modules.sops
|
modules.sops
|
||||||
modules.fish
|
modules.fish
|
||||||
modules.surface-touchpad
|
|
||||||
(<modules/helium> {
|
(<modules/helium> {
|
||||||
default = true;
|
default = true;
|
||||||
})
|
})
|
||||||
modules.kitty
|
modules.kitty
|
||||||
modules.stylix
|
modules.stylix
|
||||||
# modules.quickshell
|
modules.quickshell
|
||||||
modules.barbar
|
modules.lavd
|
||||||
# modules.lavd
|
|
||||||
# modules.omp
|
|
||||||
# modules.podman
|
# modules.podman
|
||||||
# modules.openvivo
|
# modules.openvivo
|
||||||
];
|
];
|
||||||
@@ -39,6 +36,24 @@
|
|||||||
homeManager =
|
homeManager =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
# monitor = [
|
||||||
|
# "eDP-1, 2880x1800@120, 0x0, 2"
|
||||||
|
# ];
|
||||||
|
input = {
|
||||||
|
kb_layout = "gb";
|
||||||
|
follow_mouse = 2;
|
||||||
|
sensitivity = 0;
|
||||||
|
};
|
||||||
|
decoration = {
|
||||||
|
blur = lib.mkForce {
|
||||||
|
enabled = false;
|
||||||
|
passes = 1;
|
||||||
|
new_optimizations = true;
|
||||||
|
ignore_opacity = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
telegram-desktop
|
telegram-desktop
|
||||||
equibop
|
equibop
|
||||||
|
|||||||
@@ -47,6 +47,10 @@
|
|||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
services.upower.enable = true;
|
services.upower.enable = true;
|
||||||
|
# boot.kernelPackages = pkgs.linuxPackages_6_12; # Hibernate works on 6.12 but not on latest
|
||||||
|
# boot.kernelPackages = pkgs.linuxPackages_latest; # Unpinned the linux version for now.. as i am not using hibernate that often
|
||||||
|
# boot.kernelPackages =
|
||||||
|
# inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-latest-lto-x86_64-v3;
|
||||||
networking.hostName = "doloro-nixos-laptop"; # Define your hostname.
|
networking.hostName = "doloro-nixos-laptop"; # Define your hostname.
|
||||||
# security.rtkit.enable = true;
|
# security.rtkit.enable = true;
|
||||||
|
|
||||||
@@ -93,22 +97,16 @@
|
|||||||
intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
|
intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
|
||||||
};
|
};
|
||||||
hardware = {
|
hardware = {
|
||||||
# Qualcomm Adreno X1-85 (freedreno/turnip) + IRIS need the qcom
|
# firmware = [ pkgs.intel-npu-driver ];
|
||||||
# firmware blobs (gen70500_sqe.fw / gmu.bin / zap.mbn). On most
|
|
||||||
# Snapdragon X laptops these must be extracted from Windows unless
|
|
||||||
# shipped by linux-firmware (e.g. ThinkPad T14s Gen 6).
|
|
||||||
firmware = [ pkgs.linux-firmware ];
|
|
||||||
graphics = {
|
graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# Adreno has no userspace driver package to add here: GL/Vulkan
|
|
||||||
# (freedreno/turnip) come from mesa (auto-included), and IRIS video
|
|
||||||
# has no usable VA-API backend yet, so extraPackages stays empty.
|
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# NOTE: removed LIBVA_DRIVER_NAME="iHD" — that forces the Intel media
|
environment.sessionVariables = {
|
||||||
# driver and is wrong on Qualcomm Adreno (aarch64).
|
LIBVA_DRIVER_NAME = "iHD";
|
||||||
|
}; # Force intel-media-driver
|
||||||
|
|
||||||
# services.fwupd = {
|
# services.fwupd = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
@@ -159,7 +157,7 @@
|
|||||||
# # initialPassword = "sex";
|
# # initialPassword = "sex";
|
||||||
# };
|
# };
|
||||||
users.users.root = {
|
users.users.root = {
|
||||||
initialPassword = "meowmeowmeow";
|
password = "meowmeowmeow";
|
||||||
};
|
};
|
||||||
users.mutableUsers = false;
|
users.mutableUsers = false;
|
||||||
services.system76-scheduler.enable = false;
|
services.system76-scheduler.enable = false;
|
||||||
@@ -173,12 +171,12 @@
|
|||||||
# "mem_sleep_default=deep"
|
# "mem_sleep_default=deep"
|
||||||
# "i915.fastboot=1"
|
# "i915.fastboot=1"
|
||||||
# "i915.modeset=1"
|
# "i915.modeset=1"
|
||||||
"ahci.mobile_lpm_policy=1"
|
# "ahci.mobile_lpm_policy=1"
|
||||||
# "intel_idle.max_cstate=10"
|
# "intel_idle.max_cstate=10"
|
||||||
"processor.max_cstate=10"
|
"processor.max_cstate=10"
|
||||||
"pci=noaer"
|
"pci=noaer"
|
||||||
"quiet"
|
# "quiet"
|
||||||
"splash"
|
# "splash"
|
||||||
# "idle=halt"
|
# "idle=halt"
|
||||||
];
|
];
|
||||||
boot.binfmt.emulatedSystems = [
|
boot.binfmt.emulatedSystems = [
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
modules,
|
modules,
|
||||||
__findFile,
|
__findFile,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
den.aspects.doloro-shared = {
|
den.aspects.doloro-shared = {
|
||||||
includes = [
|
includes = [
|
||||||
modules.nixvim
|
modules.nixvim
|
||||||
@@ -13,11 +14,9 @@
|
|||||||
modules.hyfetch
|
modules.hyfetch
|
||||||
modules.ssh
|
modules.ssh
|
||||||
];
|
];
|
||||||
homeManager = {
|
homeManager =
|
||||||
pkgs,
|
{ pkgs, lib, ... }:
|
||||||
lib,
|
{
|
||||||
...
|
|
||||||
}: {
|
|
||||||
home = {
|
home = {
|
||||||
username = "doloro";
|
username = "doloro";
|
||||||
homeDirectory = "/home/doloro";
|
homeDirectory = "/home/doloro";
|
||||||
@@ -25,13 +24,13 @@
|
|||||||
wl-clipboard
|
wl-clipboard
|
||||||
# home-manager
|
# home-manager
|
||||||
btop
|
btop
|
||||||
pavucontrol
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
programs.home-manager.enable = true;
|
programs.home-manager.enable = true;
|
||||||
};
|
};
|
||||||
nixos = { lib, ... }: {
|
nixos =
|
||||||
boot.kernelModules = [ "ntsync" ];
|
{ lib, ... }:
|
||||||
|
{
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
__findFile,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
den.aspects.doloro-wsl = {
|
|
||||||
includes = [
|
|
||||||
<den/primary-user>
|
|
||||||
den.aspects.doloro-shared
|
|
||||||
modules.fish
|
|
||||||
modules.tmux
|
|
||||||
modules.nix
|
|
||||||
modules.omp
|
|
||||||
modules.hyfetch
|
|
||||||
modules.git
|
|
||||||
];
|
|
||||||
nixos = {
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
users.users.doloro = {
|
|
||||||
isNormalUser = true;
|
|
||||||
shell = pkgs.fish;
|
|
||||||
uid = 1000;
|
|
||||||
# hashedPasswordFile = config.sops.secrets."doloro-hashed_password".path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
homeManager = {...}: {
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake-file.inputs = {
|
|
||||||
};
|
|
||||||
den.aspects.wsl = {
|
|
||||||
includes = [
|
|
||||||
modules.wsl
|
|
||||||
modules.tmux
|
|
||||||
modules.nix
|
|
||||||
modules.omp
|
|
||||||
modules.hyfetch
|
|
||||||
modules.git
|
|
||||||
];
|
|
||||||
nixos = {lib, ...}: {
|
|
||||||
wsl.enable = true;
|
|
||||||
wsl.defaultUser = "doloro";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -11,28 +11,11 @@
|
|||||||
# <modules/services/traefik>
|
# <modules/services/traefik>
|
||||||
<modules/services/caddy>
|
<modules/services/caddy>
|
||||||
<modules/services/home-assistant>
|
<modules/services/home-assistant>
|
||||||
<modules/services/docker-registry>
|
|
||||||
<modules/services/ddns>
|
<modules/services/ddns>
|
||||||
<modules/services/rtmp-to-whip>
|
|
||||||
];
|
];
|
||||||
nixos =
|
nixos = {
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
networking.hostName = "nixos-001-rp5";
|
networking.hostName = "nixos-001-rp5";
|
||||||
|
|
||||||
fileSystems = {
|
|
||||||
"/" = {
|
|
||||||
device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
|
|
||||||
fsType = "ext4";
|
|
||||||
options = [ "noatime" ];
|
|
||||||
};
|
|
||||||
"/boot/firmware" = {
|
|
||||||
device = "/dev/disk/by-uuid/2175-794E";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [ "noatime" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
enable = true;
|
enable = true;
|
||||||
allowedTCPPorts = [
|
allowedTCPPorts = [
|
||||||
@@ -43,38 +26,11 @@
|
|||||||
allowedUDPPortRanges = [ ];
|
allowedUDPPortRanges = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
system.activationScripts.docker-config-fix = ''
|
|
||||||
if [ -d /root/.docker/config.json ]; then
|
|
||||||
rm -rf /root/.docker/config.json
|
|
||||||
echo '{}' > /root/.docker/config.json
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
virtualisation.docker.package = pkgs.docker;
|
|
||||||
virtualisation.docker.autoPrune = {
|
|
||||||
enable = true;
|
|
||||||
dates = "weekly";
|
|
||||||
flags = [
|
|
||||||
"--all"
|
|
||||||
"--volumes"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
virtualisation.oci-containers.backend = "docker";
|
virtualisation.oci-containers.backend = "docker";
|
||||||
|
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
nixpkgs.hostPlatform = "aarch64-linux";
|
nixpkgs.hostPlatform = "aarch64-linux";
|
||||||
|
|
||||||
nix.gc = {
|
|
||||||
automatic = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
homeManager =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [
|
|
||||||
pkgs.btop
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
__findFile,
|
__findFile,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
# Homes
|
# Homes
|
||||||
den.homes.x86_64-linux.doloro-desktop = {
|
den.homes.x86_64-linux.doloro-desktop = {
|
||||||
aspect = "doloro-desktop";
|
aspect = "doloro-desktop";
|
||||||
@@ -13,9 +14,6 @@
|
|||||||
den.homes.aarch64-linux.doloro-laptop = {
|
den.homes.aarch64-linux.doloro-laptop = {
|
||||||
userName = "doloro";
|
userName = "doloro";
|
||||||
};
|
};
|
||||||
den.homes.aarch64-linux.doloro-wsl = {
|
|
||||||
userName = "doloro";
|
|
||||||
};
|
|
||||||
# Machines
|
# Machines
|
||||||
den.hosts.x86_64-linux.desktop = {
|
den.hosts.x86_64-linux.desktop = {
|
||||||
users.doloro = {
|
users.doloro = {
|
||||||
@@ -30,19 +28,6 @@
|
|||||||
home-manager.enable = true;
|
home-manager.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
den.hosts.aarch64-linux.wsl = {
|
|
||||||
users.doloro = {
|
|
||||||
aspect = "doloro-wsl";
|
|
||||||
home-manager.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
den.hosts.x86_64-linux.doloro-bootable = {
|
|
||||||
users.doloro = {
|
|
||||||
aspect = "doloro-bootable";
|
|
||||||
homeManager.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
den.schema.user.classes = lib.mkDefault [ "homeManager" ];
|
den.schema.user.classes = lib.mkDefault [ "homeManager" ];
|
||||||
|
|
||||||
@@ -51,4 +36,5 @@
|
|||||||
type = lib.types.attrs;
|
type = lib.types.attrs;
|
||||||
description = "Home Manager configurations for users.";
|
description = "Home Manager configurations for users.";
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,5 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
|
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
|
||||||
nixpkgs-master.url = "github:NixOS/nixpkgs/master";
|
|
||||||
# Builds from its own locked nixpkgs (electron lib paths pinned to that rev).
|
|
||||||
grimoire.url = "github:Slush97/grimoire";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,83 +11,9 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
homeManager =
|
homeManager =
|
||||||
{ pkgs, config, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = [
|
home.packages = [ pkgs.opencode ];
|
||||||
pkgs.claude-code
|
|
||||||
pkgs.snip
|
|
||||||
];
|
|
||||||
programs.opencode = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
rust-analyzer
|
|
||||||
typescript-language-server
|
|
||||||
];
|
|
||||||
context = ''
|
|
||||||
Instructions:
|
|
||||||
|
|
||||||
- Do NOT preemptively load all references - use lazy loading based on actual need
|
|
||||||
- When loaded, treat content as mandatory instructions that override defaults
|
|
||||||
- Follow references recursively when needed
|
|
||||||
|
|
||||||
- NO EMOJIS
|
|
||||||
'';
|
|
||||||
settings = {
|
|
||||||
"lsp" = true;
|
|
||||||
plugin = [
|
|
||||||
"@tarquinen/opencode-dcp@latest"
|
|
||||||
"@xberg-io/opencode-xberg"
|
|
||||||
"@xberg-io/opencode-crawlberg"
|
|
||||||
"@xberg-io/opencode-html-to-markdown"
|
|
||||||
"@xberg-io/opencode-liter-llm"
|
|
||||||
"opencode-plugin-litellm@latest"
|
|
||||||
"@dietrichgebert/ponytail"
|
|
||||||
"opencode-autodiscover"
|
|
||||||
"@xberg-io/opencode-tree-sitter-language-pack"
|
|
||||||
# Token slimming: filters shell command output via snip CLI
|
|
||||||
# (https://github.com/VincentHardouin/opencode-snip)
|
|
||||||
"opencode-snip@latest"
|
|
||||||
# Replace/extend the per-model system prompt via
|
|
||||||
# ~/.config/opencode/system-prompts.json
|
|
||||||
# (https://github.com/kmcquade/opencode-sysprompt-override-plugin)
|
|
||||||
"opencode-sysprompt-override@latest"
|
|
||||||
];
|
|
||||||
provider.litellm = {
|
|
||||||
npm = "@ai-sdk/openai-compatible";
|
|
||||||
name = "LiteLLM (scuggo)";
|
|
||||||
options = {
|
|
||||||
baseURL = "https://9f5db439.fwds.scug.io/v1";
|
|
||||||
apiKey = "{env:SCUG_IO_API_KEY}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# Built-in OpenCode Go provider (https://opencode.ai/zen/go) —
|
|
||||||
# key from sops secret opencode-go-zen-key via $OPENCODE_GO_API_KEY
|
|
||||||
provider.opencode-go = {
|
|
||||||
options = {
|
|
||||||
apiKey = "{env:OPENCODE_GO_API_KEY}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
provider.commandcode = {
|
|
||||||
npm = "@ai-sdk/openai-compatible";
|
|
||||||
name = "Command Code";
|
|
||||||
options = {
|
|
||||||
baseURL = "https://api.commandcode.ai/provider/v1";
|
|
||||||
apiKey = "{env:COMMANDCODE_API_KEY}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# TUI plugin: token-tracker (https://github.com/eserete/opencode-token-tracker)
|
|
||||||
tui = {
|
|
||||||
plugin = [ "./plugins/token-tracker.tsx" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
xdg.configFile."opencode/plugins/token-tracker.tsx" = {
|
|
||||||
source = pkgs.fetchurl {
|
|
||||||
url = "https://raw.githubusercontent.com/eserete/opencode-token-tracker/main/token-tracker.tsx";
|
|
||||||
sha256 = "a1d56f6d86f512ca2e81653a57ff372c2ea0a3398bcdbebda6de9f9ed89ee45a";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
/**
|
|
||||||
* Model cost display extension - shows cost info in status bar.
|
|
||||||
*
|
|
||||||
* Format: "$X.XX (Y.YY) in" where Y.YY is cache write cost if present.
|
|
||||||
*
|
|
||||||
* Usage: pi -e ./model-cost.ts
|
|
||||||
*/
|
|
||||||
|
|
||||||
import type {
|
|
||||||
ExtensionAPI,
|
|
||||||
ModelSelectEvent,
|
|
||||||
UIContext,
|
|
||||||
} from "@earendil-works/pi-coding-agent";
|
|
||||||
|
|
||||||
export default function (pi: ExtensionAPI) {
|
|
||||||
const modelSelectHandler = async (
|
|
||||||
event: ModelSelectEvent,
|
|
||||||
ctx: UIContext,
|
|
||||||
) => {
|
|
||||||
const { model } = event;
|
|
||||||
|
|
||||||
// Get cost data from model config
|
|
||||||
const cost = getModelCost(model);
|
|
||||||
|
|
||||||
if (cost) {
|
|
||||||
ctx.ui.setStatus("model", cost);
|
|
||||||
} else {
|
|
||||||
ctx.ui.setStatus("model", "");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
pi.on("model_select", modelSelectHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getModelCost(model: any): string {
|
|
||||||
if (!model?.cost) return "";
|
|
||||||
|
|
||||||
const { input, output, cacheRead, cacheWrite } = model.cost;
|
|
||||||
|
|
||||||
// Only show if there's actual cost data
|
|
||||||
const hasCost =
|
|
||||||
input !== 0 || output !== 0 || cacheRead !== 0 || cacheWrite !== 0;
|
|
||||||
if (!hasCost) return "";
|
|
||||||
|
|
||||||
// Format: "$X.XX (Y.YY) in"
|
|
||||||
const parts: string[] = [];
|
|
||||||
|
|
||||||
if (input !== 0) {
|
|
||||||
const cachePrefix = cacheRead > 0 ? ` (↙${cacheRead}) ` : "";
|
|
||||||
parts.push(`$${input}${cachePrefix}in`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (output !== 0) {
|
|
||||||
const cachePrefix = cacheWrite > 0 ? ` (↗${cacheWrite}) ` : "";
|
|
||||||
parts.push(`$${output}${cachePrefix}out`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parts.length === 0) return "";
|
|
||||||
|
|
||||||
return parts.join(" / ");
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
// @ts-nocheck — jiti-loaded pi extension: package imports resolve via pi's
|
|
||||||
// extension loader aliases at runtime, not from this directory. No typecheck.
|
|
||||||
import fs from "node:fs";
|
|
||||||
import os from "node:os";
|
|
||||||
import path from "node:path";
|
|
||||||
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
||||||
import { getBuiltinModels } from "@earendil-works/pi-ai/providers/all";
|
|
||||||
import type { Model } from "@earendil-works/pi-ai";
|
|
||||||
|
|
||||||
interface ProviderFilter {
|
|
||||||
/** Keep only models whose cost is all zero (free). */
|
|
||||||
freeOnly?: boolean;
|
|
||||||
/** Keep only these model ids. */
|
|
||||||
keep?: string[];
|
|
||||||
/** Drop these model ids. */
|
|
||||||
drop?: string[];
|
|
||||||
/** Keep only models whose id contains any of these substrings. */
|
|
||||||
keepIdContaining?: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
const isFree = (m: Model): boolean => {
|
|
||||||
const c = m.cost;
|
|
||||||
const baseFree =
|
|
||||||
c.input === 0 && c.output === 0 && c.cacheRead === 0 && c.cacheWrite === 0;
|
|
||||||
// A model with cost tiers is not free: tiers kick in above a token threshold.
|
|
||||||
return baseFree && !(c.tiers && c.tiers.length > 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
const matches = (m: Model, f: ProviderFilter): boolean => {
|
|
||||||
if (f.freeOnly && !isFree(m)) return false;
|
|
||||||
if (f.keep && f.keep.length > 0 && !f.keep.includes(m.id)) return false;
|
|
||||||
if (f.drop && f.drop.includes(m.id)) return false;
|
|
||||||
if (f.keepIdContaining && f.keepIdContaining.length > 0) {
|
|
||||||
if (!f.keepIdContaining.some((s) => m.id.includes(s))) return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function (pi: ExtensionAPI): void {
|
|
||||||
const configPath = path.join(
|
|
||||||
os.homedir(),
|
|
||||||
".pi",
|
|
||||||
"agent",
|
|
||||||
"model-filters.json",
|
|
||||||
);
|
|
||||||
let config: { providers?: Record<string, ProviderFilter> };
|
|
||||||
try {
|
|
||||||
config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
||||||
} catch {
|
|
||||||
return; // no config, no-op
|
|
||||||
}
|
|
||||||
for (const [providerId, filter] of Object.entries(config.providers ?? {})) {
|
|
||||||
const all = getBuiltinModels(providerId);
|
|
||||||
if (all.length === 0) {
|
|
||||||
console.warn(
|
|
||||||
"[model-filter] no built-in catalog for provider: " + providerId,
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const models = all.filter((m) => matches(m, filter));
|
|
||||||
// registerProvider with `models` replaces the provider's full model list;
|
|
||||||
// auth and streaming are inherited from the built-in provider.
|
|
||||||
pi.registerProvider(providerId, { models });
|
|
||||||
console.log(
|
|
||||||
"[model-filter] " +
|
|
||||||
providerId +
|
|
||||||
": " +
|
|
||||||
all.length +
|
|
||||||
" -> " +
|
|
||||||
models.length +
|
|
||||||
" models",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
modules,
|
|
||||||
den,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
flake-file.inputs = {
|
|
||||||
omp-nix.url = "git+https://git.molez.org/mandlm/omp-nix?ref=main";
|
|
||||||
};
|
|
||||||
modules.omp = {
|
|
||||||
homeManager = {
|
|
||||||
imports = [ inputs.omp-nix.homeManagerModules.omp ];
|
|
||||||
oh-my-pi.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,254 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
modules.pi-coding = {
|
|
||||||
homeManager =
|
|
||||||
{ pkgs, config, ... }:
|
|
||||||
{
|
|
||||||
programs.pi-coding-agent = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = [
|
|
||||||
pkgs.nodejs
|
|
||||||
# pkgs.lean-lsp-mcp
|
|
||||||
];
|
|
||||||
settings = {
|
|
||||||
"litellm" = {
|
|
||||||
"providers" = {
|
|
||||||
"litellm" = {
|
|
||||||
"displayName" = "scuggo";
|
|
||||||
"baseUrl" = "https://ai-proxy.fwds.scug.io";
|
|
||||||
"apiKey" = "$SCUG_IO_API_KEY";
|
|
||||||
"compat" = {
|
|
||||||
"sendSessionAffinityHeaders" = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"skills" = {
|
|
||||||
"enabled" = true;
|
|
||||||
};
|
|
||||||
"compat" = {
|
|
||||||
"sendSessionAffinityHeaders" = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"mcp" = {
|
|
||||||
"enabled" = true;
|
|
||||||
};
|
|
||||||
"uiMode" = "fullscreen";
|
|
||||||
"showCacheMissNotices" = true;
|
|
||||||
"vstack" = {
|
|
||||||
"extensionManager" = {
|
|
||||||
"config" = { };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
packages = [
|
|
||||||
# "npm:@odinlayer/pi-provider-litellm"
|
|
||||||
"npm:pi-provider-litellm"
|
|
||||||
# Web search / content extraction (opencode-crawlberg + opencode-html-to-markdown equivalent)
|
|
||||||
# "npm:pi-web-access"
|
|
||||||
# Local document parsing / OCR (opencode-xberg equivalent)
|
|
||||||
"npm:pi-docparser"
|
|
||||||
# "npm:@gotgenes/pi-permission-system"
|
|
||||||
# "npm:@vanillagreen/pi-extension-manager"
|
|
||||||
# "npm:@vanillagreen/pi-qol"
|
|
||||||
"npm:pi-vitals"
|
|
||||||
# "npm:pi-spark"
|
|
||||||
# "npm:pi-caveman"
|
|
||||||
"npm:@tmustier/pi-usage-extension"
|
|
||||||
"npm:@heyhuynhgiabuu/pi-pretty"
|
|
||||||
# "npm:pi-lens"
|
|
||||||
# "npm:pi-lean-ctx"
|
|
||||||
# "npm:@rohaquinlop/pi-deepseek-cache"
|
|
||||||
"npm:pi-cache-optimizer"
|
|
||||||
"npm:pi-opencode-go-cache"
|
|
||||||
"npm:@pi-vault/pi-dcp"
|
|
||||||
"git:github.com/DietrichGebert/ponytail"
|
|
||||||
"npm:pi-commandcode-provider"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
context = ''
|
|
||||||
Core Directive: precise execution, strict safety, long-term solutions.
|
|
||||||
1. Standards: hard fail unless overridden; files <=300 lines (refactor if exceeded); no hardcoding — config/env/consts only; no defaults — fail on missing config; no legacy/shims/auto-migrations, assume clean state; root fixes only, no cosmetic patches (report unrelated bugs).
|
|
||||||
2. Safety: never run destructive ops (rm, reset --hard, deletions) without explicit prior approval; respect sandbox mode (ro/write), request approval if blocked; new code = creative, existing code = minimal deltas (no style/rename drift).
|
|
||||||
3. Tools: todowrite for multi-step — exactly one in_progress, update on completion; rg for search; outputs truncated (~256 lines/10KB), read large files in chunks (<250 lines); edit = trust tool, no re-read, no added headers/comments; build/test/lint before yielding, yield only after todowrite done.
|
|
||||||
4. Communication: AGENTS.md governs — deepest file wins, user prompt overrides; 1-sentence next-action preamble before any tool call; final output GFM with clickable file refs (src/main.ts:50), no file://, technical/dense/impersonal.
|
|
||||||
|
|
||||||
[CORE TOOLING DOCTRINE]
|
|
||||||
- Files: read truncates at 2000 lines/50KB (use offset/limit); write creates/overwrites/auto-parents; edit = smallest unique oldText, merge nearby, never include huge unchanged regions. Never cat/echo/tee/sed -i/head/tail for file content.
|
|
||||||
- Search: rg -n for text; grep tool (glob filter) for content; find tool for glob discovery only.
|
|
||||||
- Navigation: symbol_search → module_report → read_symbol/read_enclosing; never find + manual parsing.
|
|
||||||
- Diagnostics: lens_diagnostics (delta=this turn, all=session, full=project-wide before done); lsp_diagnostics before builds.
|
|
||||||
- Context: recall_context(id) to recover compressed/expired/truncated content.
|
|
||||||
- bash: only for git/nix/builds/scripts/network/system mgmt; set timeout for long ops.
|
|
||||||
- CRITICAL: never find on /nix/store — unpruned walk locks up execution; ls known paths, ask user for unknown paths. ABSOLUTE.
|
|
||||||
- You have a web-search tool. Use it sparingly but reach for it in situations where info isnt directly known. (i.e, "common problem" -> get from memory, think hard if needed, "hard problem that isnt in your training data or request for you to read docs for a lib or program" -> search online)
|
|
||||||
- Searching for anything (including with wildcards ("/nix/store/*/**" or others)) isnt permitted at all. You must find paths inside the project, such a result/
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# pi-vitals config
|
|
||||||
home.file.".pi/agent/powerline.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
leftSegments = [
|
|
||||||
"pi"
|
|
||||||
"separator"
|
|
||||||
"model"
|
|
||||||
"thinking"
|
|
||||||
"ext_status"
|
|
||||||
"separator"
|
|
||||||
"path"
|
|
||||||
"git"
|
|
||||||
"separator"
|
|
||||||
"token_total"
|
|
||||||
"token_in"
|
|
||||||
"token_out"
|
|
||||||
"cache_read"
|
|
||||||
"cache_write"
|
|
||||||
];
|
|
||||||
rightSegments = [
|
|
||||||
"separator"
|
|
||||||
"cost"
|
|
||||||
"model_cost"
|
|
||||||
"context_pct"
|
|
||||||
];
|
|
||||||
icons = {
|
|
||||||
pi = "π";
|
|
||||||
model = "◈";
|
|
||||||
thinking = "🧠";
|
|
||||||
folder = "📁";
|
|
||||||
repo = "📦";
|
|
||||||
git = "⎇";
|
|
||||||
tokens = "⊛";
|
|
||||||
input = "↑";
|
|
||||||
output = "↓";
|
|
||||||
cacheRead = "↙";
|
|
||||||
cacheWrite = "↗";
|
|
||||||
contextPct = "◫";
|
|
||||||
cost = "$";
|
|
||||||
modelCost = "(in/out)";
|
|
||||||
separator = "│";
|
|
||||||
};
|
|
||||||
colors = {
|
|
||||||
pi = "accent";
|
|
||||||
model = "#d787af";
|
|
||||||
path = "#00afaf";
|
|
||||||
git = "success";
|
|
||||||
gitDirty = "warning";
|
|
||||||
gitClean = "success";
|
|
||||||
thinking = "muted";
|
|
||||||
context = "dim";
|
|
||||||
contextWarn = "warning";
|
|
||||||
contextError = "error";
|
|
||||||
cost = "text";
|
|
||||||
modelCost = "text";
|
|
||||||
tokens = "muted";
|
|
||||||
separator = "dim";
|
|
||||||
};
|
|
||||||
segmentOptions = {
|
|
||||||
path = {
|
|
||||||
mode = "basename";
|
|
||||||
};
|
|
||||||
git = {
|
|
||||||
showBranch = true;
|
|
||||||
showStaged = true;
|
|
||||||
showUnstaged = true;
|
|
||||||
showUntracked = true;
|
|
||||||
};
|
|
||||||
context_pct = {
|
|
||||||
showAutoIcon = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
home.file.".pi/agent/auth.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
"opencode-go" = {
|
|
||||||
"type" = "api_key";
|
|
||||||
"key" = "$OPENCODE_GO_API_KEY";
|
|
||||||
};
|
|
||||||
"opencode" = {
|
|
||||||
"type" = "api_key";
|
|
||||||
"key" = "$OPENCODE_GO_API_KEY";
|
|
||||||
};
|
|
||||||
"command-code" = {
|
|
||||||
"type" = "api_key";
|
|
||||||
"key" = "$COMMANDCODE_API_KEY";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Cache/routing compat overrides (provider-level minimal)
|
|
||||||
home.file.".pi/agent/models.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
providers = {
|
|
||||||
"opencode-go" = {
|
|
||||||
compat = {
|
|
||||||
supportsLongCacheRetention = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Restrict providers to a subset of their built-in models.
|
|
||||||
# Filter config: ~/.pi/agent/model-filters.json (see below).
|
|
||||||
home.file.".pi/agent/extensions/model-filter.ts" = {
|
|
||||||
source = ./model-filter.ts;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Show model cost in status bar
|
|
||||||
home.file.".pi/agent/extensions/model-cost.ts" = {
|
|
||||||
source = ./model-cost.ts;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Model filter config: per-provider filters applied by model-filter.ts
|
|
||||||
home.file.".pi/agent/model-filters.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
providers = {
|
|
||||||
# opencode: only free models (all cost zero)
|
|
||||||
opencode = {
|
|
||||||
freeOnly = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# pi-web-access config: raw results, no curator / no AI summarising
|
|
||||||
home.file.".pi/web-search.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
workflow = "none";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# pi-spark config
|
|
||||||
home.file.".pi/agent/spark.json" = {
|
|
||||||
text = builtins.toJSON {
|
|
||||||
editor = {
|
|
||||||
spinner = "tildes";
|
|
||||||
};
|
|
||||||
footer = false;
|
|
||||||
presets = {
|
|
||||||
"scuggo" = {
|
|
||||||
provider = "litellm";
|
|
||||||
model = "Ornith-1.0-9B";
|
|
||||||
thinkingLevel = "medium";
|
|
||||||
};
|
|
||||||
"claude" = {
|
|
||||||
provider = "anthropic";
|
|
||||||
model = "claude-opus-4-8";
|
|
||||||
thinkingLevel = "high";
|
|
||||||
};
|
|
||||||
"gpt" = {
|
|
||||||
provider = "openai-codex";
|
|
||||||
model = "gpt-5.5";
|
|
||||||
thinkingLevel = "medium";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{ modules, ... }:
|
|
||||||
{
|
|
||||||
modules.ai = {
|
|
||||||
provides = {
|
|
||||||
secrets = {
|
|
||||||
homeManager =
|
|
||||||
{ config, ... }:
|
|
||||||
{
|
|
||||||
sops = {
|
|
||||||
secrets.scug-io-ai-key = {
|
|
||||||
# Decrypted file path (available at runtime, not eval time)
|
|
||||||
path = config.home.homeDirectory + "/.secrets/scug_io_api_key";
|
|
||||||
sopsFile = ../secrets/content/secrets.yaml;
|
|
||||||
};
|
|
||||||
secrets.opencode-go-zen-key = {
|
|
||||||
# Decrypted file path (available at runtime, not eval time)
|
|
||||||
path = config.home.homeDirectory + "/.secrets/opencode-go-zen-key";
|
|
||||||
sopsFile = ../secrets/content/secrets.yaml;
|
|
||||||
};
|
|
||||||
secrets.commandcode-key = {
|
|
||||||
# Decrypted file path (available at runtime, not eval time)
|
|
||||||
path = config.home.homeDirectory + "/.secrets/commandcode-key";
|
|
||||||
sopsFile = ../secrets/content/secrets.yaml;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
programs.fish = {
|
|
||||||
shellInit = ''
|
|
||||||
if test -f "$HOME/.secrets/scug_io_api_key"
|
|
||||||
set -x SCUG_IO_API_KEY (cat "$HOME/.secrets/scug_io_api_key")
|
|
||||||
end
|
|
||||||
if test -f "$HOME/.secrets/opencode-go-zen-key"
|
|
||||||
set -x OPENCODE_GO_API_KEY (cat "$HOME/.secrets/opencode-go-zen-key")
|
|
||||||
end
|
|
||||||
if test -f "$HOME/.secrets/commandcode-key"
|
|
||||||
set -x COMMANDCODE_API_KEY (cat "$HOME/.secrets/commandcode-key")
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
{ modules, inputs, ... }: {
|
|
||||||
flake-file.inputs = {
|
|
||||||
barbar.url = "git+https://git.scug.io/doloro/barbar?ref=master";
|
|
||||||
};
|
|
||||||
modules.barbar = {
|
|
||||||
homeManager = { pkgs, ... }: {
|
|
||||||
imports = [ inputs.barbar.homeManagerModules.default ];
|
|
||||||
programs.barbar = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
display = {
|
|
||||||
monitor = "DP-2";
|
|
||||||
height = 20;
|
|
||||||
antialiasing = true;
|
|
||||||
default_text_size = 14.0;
|
|
||||||
padding = 4.0;
|
|
||||||
spacing = 8.0;
|
|
||||||
# Absolute store path: barbar resolves `[display].theme` against
|
|
||||||
# its cwd, which is not the home dir under systemd.
|
|
||||||
theme = "${pkgs.writeText "barbar-base16.yaml" ''
|
|
||||||
scheme: "Gruvbox dark, medium"
|
|
||||||
author: "https://github.com/morhetz/gruvbox"
|
|
||||||
base00: "282828" # bg
|
|
||||||
base01: "3c3836" # bg1
|
|
||||||
base02: "504945" # bg2
|
|
||||||
base03: "665c54" # bg3
|
|
||||||
base04: "bdae93" # fg4
|
|
||||||
base05: "d5c4a1" # fg
|
|
||||||
base06: "ebdbb2" # fg2
|
|
||||||
base07: "fbf1c7" # fg0
|
|
||||||
base08: "fb4934" # red
|
|
||||||
base09: "fe8019" # orange
|
|
||||||
base0A: "fabd2f" # yellow
|
|
||||||
base0B: "b8bb26" # green
|
|
||||||
base0C: "8ec07c" # aqua
|
|
||||||
base0D: "83a598" # blue
|
|
||||||
base0E: "d3869b" # purple
|
|
||||||
base0F: "d65d0e" # brown
|
|
||||||
''}";
|
|
||||||
};
|
|
||||||
order = {
|
|
||||||
left = [ "workspaces" ];
|
|
||||||
middle = [ ];
|
|
||||||
right = [
|
|
||||||
"audio"
|
|
||||||
"clock"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
modules.clock.show_seconds = false;
|
|
||||||
modules.workspaces = {
|
|
||||||
count = 10;
|
|
||||||
gap = 3.0;
|
|
||||||
slot_w = 10.0;
|
|
||||||
slot_h = 17.0;
|
|
||||||
radius = 2.5;
|
|
||||||
scale_active = 1.0;
|
|
||||||
scale_exists = 0.85;
|
|
||||||
scale_absent = 0.65;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -4,11 +4,9 @@
|
|||||||
homeManager = {
|
homeManager = {
|
||||||
services.dunst = {
|
services.dunst = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# systemd.enable = true;
|
|
||||||
settings = {
|
settings = {
|
||||||
global = {
|
global = {
|
||||||
font = "Noto Nerd Font 8";
|
font = "Noto Nerd Font 8";
|
||||||
monitor = "DP-2";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
+8
-20
@@ -1,28 +1,14 @@
|
|||||||
|
{ modules, ... }:
|
||||||
{
|
{
|
||||||
modules,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
flake-file.inputs = {
|
|
||||||
direnv-instant.url = "github:Mic92/direnv-instant";
|
|
||||||
};
|
|
||||||
modules.fish = {
|
modules.fish = {
|
||||||
nixos = {
|
nixos = {
|
||||||
programs.fish.enable = true;
|
programs.fish.enable = true;
|
||||||
# imports = [ inputs.direnv-instant.nixosModules.direnv-instant ];
|
|
||||||
# programs.direnv-instant.enable = true;
|
|
||||||
};
|
};
|
||||||
homeManager =
|
homeManager =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.shell.enableFishIntegration = true;
|
home.shell.enableFishIntegration = true;
|
||||||
home.packages = [
|
home.packages = [ pkgs.nix-output-monitor ];
|
||||||
pkgs.nix-output-monitor
|
|
||||||
# pkgs.devenv
|
|
||||||
];
|
|
||||||
imports = [ inputs.direnv-instant.homeModules.direnv-instant ];
|
|
||||||
programs.direnv-instant.enable = true;
|
|
||||||
programs = {
|
programs = {
|
||||||
fish = {
|
fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -32,11 +18,9 @@
|
|||||||
set -g theme_display_user yes
|
set -g theme_display_user yes
|
||||||
set -g fish_color_autosuggestion 6F6578
|
set -g fish_color_autosuggestion 6F6578
|
||||||
alias nik 'nix'
|
alias nik 'nix'
|
||||||
|
|
||||||
if not set -q TMUX
|
|
||||||
set -gx COLORTERM truecolor
|
|
||||||
end
|
|
||||||
'';
|
'';
|
||||||
|
# alias nos 'sudo echo; sudo nixos-rebuild switch --flake .#${aspect-name} --log-format internal-json -v &| nom --json'
|
||||||
|
# alias hms 'home-manager switch --flake .#${aspect-name} --log-format internal-json -v &| nom --json'
|
||||||
plugins = [
|
plugins = [
|
||||||
{
|
{
|
||||||
name = "bobthefish";
|
name = "bobthefish";
|
||||||
@@ -56,6 +40,10 @@
|
|||||||
git = true;
|
git = true;
|
||||||
extraOptions = [ ];
|
extraOptions = [ ];
|
||||||
};
|
};
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
{ modules, inputs, ... }:
|
|
||||||
{
|
|
||||||
flake-file.inputs = {
|
|
||||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
|
|
||||||
};
|
|
||||||
modules.flatpaks = {
|
|
||||||
nixos = {
|
|
||||||
imports = [
|
|
||||||
inputs.nix-flatpak.nixosModules.nix-flatpak
|
|
||||||
];
|
|
||||||
services.flatpak = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
homeManager = {
|
|
||||||
imports = [
|
|
||||||
inputs.nix-flatpak.homeManagerModules.nix-flatpak
|
|
||||||
];
|
|
||||||
services.flatpak = {
|
|
||||||
enable = true;
|
|
||||||
packages = [
|
|
||||||
{
|
|
||||||
flatpakref = "https://dl.flathub.org/repo/appstream/org.vinegarhq.Sober.flatpakref";
|
|
||||||
sha256 = "15ak2i5nk64wbmswqml2cqfgidczawqybmc7pmw94yp8wcd4yv6i";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
services.flatpak.remotes = [
|
|
||||||
{
|
|
||||||
name = "flathub-beta";
|
|
||||||
location = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
modules.gameaudio = {
|
|
||||||
homeManager =
|
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
home.packages = [
|
|
||||||
# Launch a program with all of its audio routed to GameAudioSink.
|
|
||||||
# Usage: run-on-gameaudio <command> [args...]
|
|
||||||
(pkgs.writeShellScriptBin "run-on-gameaudio" ''
|
|
||||||
if [ "$#" -eq 0 ]; then
|
|
||||||
echo "usage: run-on-gameaudio <command> [args...]" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
export PIPEWIRE_PROPS="target.object=GameAudioSink"
|
|
||||||
exec "$@"
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{ modules, ... }:
|
|
||||||
{
|
|
||||||
modules.gamemode = {
|
|
||||||
homeManager =
|
|
||||||
{ home, ... }:
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
nixos =
|
|
||||||
{ nixos, ... }:
|
|
||||||
{
|
|
||||||
programs.gamemode = {
|
|
||||||
enable = true;
|
|
||||||
enableRenice = true;
|
|
||||||
settings = {
|
|
||||||
general = {
|
|
||||||
renice = 10;
|
|
||||||
ioprio = 0;
|
|
||||||
inhibit_screensaver = 1;
|
|
||||||
disable_splitlock = 1;
|
|
||||||
};
|
|
||||||
cpu = {
|
|
||||||
park_cores = "no";
|
|
||||||
pin_cores = "yes";
|
|
||||||
};
|
|
||||||
gpu = {
|
|
||||||
apply_gpu_optimisations = "accept-responsibility";
|
|
||||||
gpu_device = 1;
|
|
||||||
nv_powermizer_mode = 1;
|
|
||||||
nv_perf_level = -1;
|
|
||||||
};
|
|
||||||
script = {
|
|
||||||
gamestart = "nvidia-smi --power-limit=175";
|
|
||||||
gamestop = "nvidia-smi --power-limit=125";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -4,18 +4,6 @@
|
|||||||
nixos =
|
nixos =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
programs.gamescope = {
|
|
||||||
enable = true;
|
|
||||||
package = (
|
|
||||||
pkgs.gamescope.overrideAttrs {
|
|
||||||
enableWsi = true;
|
|
||||||
# Fixes some games being blurry under wayland backend
|
|
||||||
NIX_CFLAGS_COMPILE = [ "-fno-fast-math" ];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
# Breaks steam launching gamescope
|
|
||||||
# capSysNice = true;
|
|
||||||
};
|
|
||||||
programs.steam = {
|
programs.steam = {
|
||||||
enable = true;
|
enable = true;
|
||||||
remotePlay.openFirewall = true;
|
remotePlay.openFirewall = true;
|
||||||
@@ -23,14 +11,14 @@
|
|||||||
localNetworkGameTransfers.openFirewall = true;
|
localNetworkGameTransfers.openFirewall = true;
|
||||||
# Ensure gamescope is inside the steam "fhs"
|
# Ensure gamescope is inside the steam "fhs"
|
||||||
package = pkgs.steam.override {
|
package = pkgs.steam.override {
|
||||||
extraLibraries = pkgs: [ pkgs.libxcb ];
|
extraLibraries = pkgs: [ pkgs.xorg.libxcb ];
|
||||||
extraPkgs =
|
extraPkgs =
|
||||||
pkgs: with pkgs; [
|
pkgs: with pkgs; [
|
||||||
attr
|
attr
|
||||||
libxcursor
|
xorg.libXcursor
|
||||||
libxi
|
xorg.libXi
|
||||||
libxinerama
|
xorg.libXinerama
|
||||||
libxscrnsaver
|
xorg.libXScrnSaver
|
||||||
libpng
|
libpng
|
||||||
libpulseaudio
|
libpulseaudio
|
||||||
libvorbis
|
libvorbis
|
||||||
@@ -38,8 +26,13 @@
|
|||||||
libkrb5
|
libkrb5
|
||||||
keyutils
|
keyutils
|
||||||
mangohud
|
mangohud
|
||||||
# gamemode
|
gamemode
|
||||||
lsof
|
lsof
|
||||||
|
(gamescope.overrideAttrs {
|
||||||
|
enableWsi = true;
|
||||||
|
# Fixes some games being blurry under wayland backend
|
||||||
|
NIX_CFLAGS_COMPILE = [ "-fno-fast-math" ];
|
||||||
|
})
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,47 +15,21 @@
|
|||||||
};
|
};
|
||||||
modules.helium = settings: {
|
modules.helium = settings: {
|
||||||
homeManager =
|
homeManager =
|
||||||
{ pkgs, lib, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
|
||||||
heliumPkg = inputs.heliumFlake.packages.${pkgs.stdenv.hostPlatform.system}.helium;
|
|
||||||
# The upstream `helium` launcher is a plain Nix wrapper that ignores any
|
|
||||||
# *-flags.conf file (that convention is Arch-specific, not NixOS). So to
|
|
||||||
# actually pass command-line flags we re-wrap the launcher here.
|
|
||||||
#
|
|
||||||
# Flag names verified against this Helium build's binary strings.
|
|
||||||
# - AcceleratedVideoDecodeLinuxGL / ...ZeroCopyGL: the VA-API GL decode
|
|
||||||
# path (renamed from the old Vaapi* names, which are no-ops here).
|
|
||||||
# - VaapiOnNvidiaGPUs: required. Chromium disables VA-API on NVIDIA by
|
|
||||||
# default and hard-skips the nvidia-drm device ("Should skip nVidia
|
|
||||||
# device named: nvidia-drm" in the logs); this re-enables it, routing
|
|
||||||
# decode to NVDEC through the nvidia-vaapi-driver bridge.
|
|
||||||
# - VaapiIgnoreDriverChecks: bypass the driver allowlist.
|
|
||||||
# HEVC decode itself needs no runtime flag in this build (enable_platform_hevc
|
|
||||||
# is compiled in and on by default). Wayland-only: the NVIDIA VA-API path
|
|
||||||
# is broken under X11. Upstream considers nvidia-vaapi-driver unsupported,
|
|
||||||
# so confirm via chrome://media-internals (decoder should read VaapiVideoDecoder).
|
|
||||||
helium = pkgs.symlinkJoin {
|
|
||||||
name = "helium-wrapped";
|
|
||||||
paths = [ heliumPkg ];
|
|
||||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/helium \
|
|
||||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ pkgs.vulkan-loader ]}" \
|
|
||||||
--add-flags "--enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL,VaapiOnNvidiaGPUs,VaapiIgnoreDriverChecks" \
|
|
||||||
--add-flags "--ignore-gpu-blocklist" \
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
home.packages = [ helium ];
|
home.packages = [
|
||||||
|
inputs.heliumFlake.packages.${pkgs.stdenv.hostPlatform.system}.helium
|
||||||
|
];
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
# Gives me widevine support. yay
|
# Gives me widevine support. yay
|
||||||
xdg.configFile."net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm" = {
|
xdg.configFile."net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm" = {
|
||||||
text = ''{"Path":"${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm"}'';
|
text = ''{"Path":"${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm"}'';
|
||||||
};
|
};
|
||||||
wayland.windowManager.hyprland.settings.bind = lib.mkIf settings.default [
|
wayland.windowManager.hyprland.settings = lib.mkIf settings.default {
|
||||||
{ _args = [ "SUPER + E" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("helium")'') ]; }
|
binds = [
|
||||||
|
"$mainMod, E, exec, helium"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,14 +7,112 @@
|
|||||||
modules.dunst
|
modules.dunst
|
||||||
];
|
];
|
||||||
homeManager =
|
homeManager =
|
||||||
|
{ pkgs, home, ... }:
|
||||||
{
|
{
|
||||||
pkgs,
|
home.packages = [
|
||||||
lib,
|
pkgs.hyprcursor
|
||||||
...
|
pkgs.wlogout
|
||||||
}:
|
pkgs.tofi
|
||||||
|
pkgs.killall
|
||||||
|
pkgs.grim
|
||||||
|
pkgs.slurp
|
||||||
|
pkgs.wayclip
|
||||||
|
];
|
||||||
|
home.pointerCursor = {
|
||||||
|
enable = true;
|
||||||
|
name = "rose-pine-hyprcursor";
|
||||||
|
package = pkgs.rose-pine-hyprcursor;
|
||||||
|
hyprcursor.enable = true;
|
||||||
|
};
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
env = [
|
||||||
|
"XCURSOR_THEME,BreezeX-RosePine-Linux"
|
||||||
|
"XCURSOR_SIZE,24"
|
||||||
|
"HYPRCURSOR_SIZE,24"
|
||||||
|
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
|
||||||
|
"WEBKIT_DISABLE_DMABUF_RENDERER,1" # maybe disable if nixos fixes alcom
|
||||||
|
];
|
||||||
|
general = {
|
||||||
|
gaps_in = 1;
|
||||||
|
gaps_out = 1;
|
||||||
|
border_size = 1;
|
||||||
|
# "col.active_border" =
|
||||||
|
# "rgb(${toString base16.rgb."base06".r},${toString base16.rgb."base06".g},${toString base16.rgb."base06".b})";
|
||||||
|
# "col.inactive_border" =
|
||||||
|
# "rgb(${toString base16.rgb."base03".r},${toString base16.rgb."base03".g},${toString base16.rgb."base03".b})";
|
||||||
|
resize_on_border = false;
|
||||||
|
allow_tearing = true;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
decoration = {
|
||||||
|
rounding = 4;
|
||||||
|
rounding_power = 1;
|
||||||
|
active_opacity = 1.0;
|
||||||
|
inactive_opacity = 1.0;
|
||||||
|
|
||||||
|
shadow = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
passes = 1;
|
||||||
|
new_optimizations = true;
|
||||||
|
ignore_opacity = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
cursor = {
|
||||||
|
no_hardware_cursors = true;
|
||||||
|
};
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
bezier = [
|
||||||
|
"easeOutQuint,0.23,1,0.32,1"
|
||||||
|
"easeInOutCubic,0.65,0.05,0.36,1"
|
||||||
|
"linear,0,0,1,1"
|
||||||
|
"almostLinear,0.5,0.5,0.75,1.0"
|
||||||
|
"quick,0.15,0,0.1,1"
|
||||||
|
];
|
||||||
|
animation = [
|
||||||
|
"global, 1, 10, default"
|
||||||
|
"border, 1, 5.39, easeOutQuint"
|
||||||
|
"windows, 1, 2.79, easeOutQuint"
|
||||||
|
"windowsIn, 1, 1, easeOutQuint, popin 87%"
|
||||||
|
"windowsOut, 1, 1, linear, popin 87%"
|
||||||
|
"windowsMove, 1, 1, easeInOutCubic"
|
||||||
|
"fadeIn, 1, 0.5, almostLinear"
|
||||||
|
"fadeOut, 1, 0.5, almostLinear"
|
||||||
|
"fade, 1, 1, quick"
|
||||||
|
"layers, 1, 3.81, easeOutQuint"
|
||||||
|
"layersIn, 1, 4, easeOutQuint, fade"
|
||||||
|
"layersOut, 1, 1.5, linear, fade"
|
||||||
|
"fadeLayersIn, 1, 1.79, almostLinear"
|
||||||
|
"fadeLayersOut, 1, 1.39, almostLinear"
|
||||||
|
"workspaces, 1, 1, almostLinear, slide"
|
||||||
|
"workspacesIn, 1, 1, easeInOutCubic, slide"
|
||||||
|
"workspacesOut, 1, 1, easeInOutCubic, slide"
|
||||||
|
"zoomFactor, 1, 7, quick"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
};
|
||||||
|
# master = {
|
||||||
|
# new_status = master;
|
||||||
|
# };
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = -1;
|
||||||
|
disable_hyprland_logo = false;
|
||||||
|
enable_anr_dialog = false;
|
||||||
|
vfr = true;
|
||||||
|
};
|
||||||
|
"$mainMod" = "SUPER";
|
||||||
|
bind = [
|
||||||
|
(
|
||||||
let
|
let
|
||||||
tofiCfg = pkgs.writeTextFile {
|
config = pkgs.writeTextFile {
|
||||||
name = "hyprland-tofi-config";
|
name = "config";
|
||||||
text = ''
|
text = ''
|
||||||
width = 100%
|
width = 100%
|
||||||
height = 100%
|
height = 100%
|
||||||
@@ -28,477 +126,74 @@
|
|||||||
background-color = #000A
|
background-color = #000A
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
meowScript = pkgs.writeShellScript "meow" ''
|
script = pkgs.writeShellScript "mreow" ''
|
||||||
|
exec $(tofi-drun -c ${config})
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
"$mainMod, R, exec, ${script}"
|
||||||
|
)
|
||||||
|
"$mainMod, C, killactive"
|
||||||
|
"$mainMod, M, exec, uwsm stop"
|
||||||
|
"$mainMod, Q, exec, kitty"
|
||||||
|
"$mainMod, V, togglefloating,"
|
||||||
|
"$mainMod, P, pseudo, # dwindle"
|
||||||
|
"$mainMod, J, togglesplit, # dwindle"
|
||||||
|
"$mainMod, left, movefocus, l"
|
||||||
|
"$mainMod, right, movefocus, r"
|
||||||
|
"$mainMod, up, movefocus, u"
|
||||||
|
"$mainMod, down, movefocus, d"
|
||||||
|
"$mainMod, L, exec, wlogout"
|
||||||
|
(
|
||||||
|
let
|
||||||
|
script = pkgs.writeShellScript "meow" ''
|
||||||
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
|
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
|
||||||
'';
|
'';
|
||||||
mreowScript = pkgs.writeShellScript "mreow" ''
|
in
|
||||||
exec $(tofi-drun -c ${tofiCfg})
|
"$mainMod, S, exec, " + "wayfreeze --after-freeze-cmd '${script}'"
|
||||||
'';
|
)
|
||||||
|
"$mainMod, F, fullscreen"
|
||||||
mainMod = "SUPER";
|
"$mainMod, mouse_down, workspace, e+1"
|
||||||
|
"$mainMod, mouse_up, workspace, e-1"
|
||||||
# Each `settings.<fn>` list entry renders as `hl.<fn>(<table>)`.
|
", home, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
# `_args` renders a multi-argument call instead of one Lua table,
|
", end, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||||
# and mkLuaInline passes raw Lua through for dispatchers.
|
", F8, pass, class:^(com\.obsproject\.Studio)$"
|
||||||
dsp = lib.generators.mkLuaInline;
|
"$mainMod, 0, workspace, 10"
|
||||||
bind = key: dispatcher: {
|
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
||||||
_args = [
|
]
|
||||||
key
|
++ (builtins.concatLists (
|
||||||
dispatcher
|
|
||||||
];
|
|
||||||
};
|
|
||||||
bezier = name: points: {
|
|
||||||
_args = [
|
|
||||||
name
|
|
||||||
{
|
|
||||||
type = "bezier";
|
|
||||||
inherit points;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
wsBinds = lib.concatLists (
|
|
||||||
builtins.genList (
|
builtins.genList (
|
||||||
i:
|
i:
|
||||||
let
|
let
|
||||||
ws = toString (i + 1);
|
ws = i + 1;
|
||||||
in
|
in
|
||||||
[
|
[
|
||||||
(bind "${mainMod} + ${ws}" (dsp "hl.dsp.focus({ workspace = ${ws} })"))
|
"$mainMod, ${toString ws}, workspace, ${toString ws}"
|
||||||
(bind "${mainMod} + SHIFT + ${ws}" (dsp "hl.dsp.window.move({ workspace = ${ws} })"))
|
"$mainMod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
|
||||||
]
|
]
|
||||||
) 9
|
) 9
|
||||||
);
|
));
|
||||||
in
|
bindm = [
|
||||||
{
|
"$mainMod, mouse:272, movewindow"
|
||||||
home.packages = [
|
"$mainMod, mouse:273, resizewindow"
|
||||||
pkgs.hyprcursor
|
|
||||||
pkgs.hyprshutdown
|
|
||||||
pkgs.tofi
|
|
||||||
pkgs.killall
|
|
||||||
pkgs.grim
|
|
||||||
pkgs.slurp
|
|
||||||
pkgs.wayclip
|
|
||||||
];
|
];
|
||||||
# wlogout menu. Default layout, except Shutdown hands off to
|
windowrule = [
|
||||||
# hyprshutdown so apps close gracefully before poweroff.
|
"match:class .*, suppress_event maximize"
|
||||||
# programs.wlogout only accepts one command per button, so
|
"match:class ^(gamescope)$, workspace 5"
|
||||||
# --post-cmd carries the actual poweroff.
|
"match:class ^(gamescope)$, immediate true"
|
||||||
programs.wlogout = {
|
"match:class ^(steam)$, workspace 6 silent"
|
||||||
enable = true;
|
"match:class ^(vesktop)$, workspace 8 silent"
|
||||||
layout = [
|
"match:class ^(org.telegram.desktop)$, workspace 8 silent"
|
||||||
{
|
"match:class ^(com.obsproject.Studio)$, workspace 10 silent"
|
||||||
label = "lock";
|
"match:initial_title ^(OBS Studio Crash Detected)$, pin true"
|
||||||
action = "loginctl lock-session";
|
"match:initial_title ^(Discord Popout)$, workspace 1 silent"
|
||||||
text = "Lock";
|
|
||||||
keybind = "l";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
label = "hibernate";
|
|
||||||
action = "systemctl hibernate";
|
|
||||||
text = "Hibernate";
|
|
||||||
keybind = "h";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
label = "logout";
|
|
||||||
action = "loginctl terminate-user $USER";
|
|
||||||
text = "Logout";
|
|
||||||
keybind = "e";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
label = "shutdown";
|
|
||||||
action = "hyprshutdown --post-cmd 'systemctl poweroff'";
|
|
||||||
text = "Shutdown";
|
|
||||||
keybind = "s";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
label = "suspend";
|
|
||||||
action = "systemctl suspend";
|
|
||||||
text = "Suspend";
|
|
||||||
keybind = "u";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
label = "reboot";
|
|
||||||
action = "hyprshutdown --post-cmd 'systemctl reboot'";
|
|
||||||
text = "Reboot";
|
|
||||||
keybind = "r";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
layerrule = [
|
||||||
home.pointerCursor = {
|
"match:namespace ^(notifications)$, no_screen_share true"
|
||||||
enable = true;
|
# "match:namespace ^(quickshell)$, blur true"
|
||||||
name = "rose-pine-hyprcursor";
|
|
||||||
package = pkgs.rose-pine-hyprcursor;
|
|
||||||
hyprcursor.enable = true;
|
|
||||||
};
|
|
||||||
services.hyprpaper = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
splash = true;
|
|
||||||
wallpaper = [
|
|
||||||
{
|
|
||||||
monitor = "HDMI-A-1";
|
|
||||||
path = "/home/doloro/Wallpaper.jpg";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
monitor = "DP-2";
|
|
||||||
path = "/home/doloro/Wallpaper.jpg";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
# exec-once = [
|
||||||
};
|
# ];
|
||||||
# The systemd session activation hooks (hyprland-session.target
|
# we need to auto launch: quickshell, steam, ar_rpc (maybe), vesktop, telegram, qbit, and obs
|
||||||
# start/stop + dbus-update-activation-environment --systemd --all)
|
|
||||||
# are still generated by Home Manager; only the imperative tail of
|
|
||||||
# the config needs raw Lua.
|
|
||||||
wayland.windowManager.hyprland = {
|
|
||||||
settings = {
|
|
||||||
config = {
|
|
||||||
general = {
|
|
||||||
gaps_in = 1;
|
|
||||||
gaps_out = 1;
|
|
||||||
border_size = 1;
|
|
||||||
resize_on_border = false;
|
|
||||||
allow_tearing = true;
|
|
||||||
layout = "dwindle";
|
|
||||||
};
|
|
||||||
input = {
|
|
||||||
follow_mouse = 2;
|
|
||||||
kb_layout = "gb";
|
|
||||||
};
|
|
||||||
decoration = {
|
|
||||||
rounding = 4;
|
|
||||||
rounding_power = 1;
|
|
||||||
active_opacity = 1.0;
|
|
||||||
inactive_opacity = 1.0;
|
|
||||||
shadow.enabled = false;
|
|
||||||
blur = {
|
|
||||||
enabled = true;
|
|
||||||
passes = 1;
|
|
||||||
new_optimizations = true;
|
|
||||||
ignore_opacity = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
cursor.default_monitor = "DP-2";
|
|
||||||
cursor.no_hardware_cursors = false;
|
|
||||||
dwindle.preserve_split = true;
|
|
||||||
misc = {
|
|
||||||
force_default_wallpaper = -1;
|
|
||||||
disable_hyprland_logo = false;
|
|
||||||
enable_anr_dialog = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
monitor = [
|
|
||||||
{
|
|
||||||
output = "HDMI-A-1";
|
|
||||||
mode = "1920x1080@60";
|
|
||||||
position = "0x0";
|
|
||||||
scale = "1";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
output = "DP-2";
|
|
||||||
mode = "1920x1080@120";
|
|
||||||
position = "1920x0";
|
|
||||||
scale = "1";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
workspace_rule = [
|
|
||||||
{
|
|
||||||
workspace = "2";
|
|
||||||
monitor = "DP-2";
|
|
||||||
default = true;
|
|
||||||
}
|
|
||||||
]
|
|
||||||
++ builtins.genList (i: {
|
|
||||||
workspace = toString (i + 2);
|
|
||||||
monitor = "DP-2";
|
|
||||||
}) 9;
|
|
||||||
|
|
||||||
device = {
|
|
||||||
name = "default";
|
|
||||||
kb_layout = "gb";
|
|
||||||
sensitivity = -0.5;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Curves are sorted ahead of animations by the module's
|
|
||||||
# `importantPrefixes` default, so the beziers exist by name.
|
|
||||||
curve = [
|
|
||||||
(bezier "easeOutQuint" [
|
|
||||||
[
|
|
||||||
0.23
|
|
||||||
1
|
|
||||||
]
|
|
||||||
[
|
|
||||||
0.32
|
|
||||||
1
|
|
||||||
]
|
|
||||||
])
|
|
||||||
(bezier "easeInOutCubic" [
|
|
||||||
[
|
|
||||||
0.65
|
|
||||||
0.05
|
|
||||||
]
|
|
||||||
[
|
|
||||||
0.36
|
|
||||||
1
|
|
||||||
]
|
|
||||||
])
|
|
||||||
(bezier "linear" [
|
|
||||||
[
|
|
||||||
0
|
|
||||||
0
|
|
||||||
]
|
|
||||||
[
|
|
||||||
1
|
|
||||||
1
|
|
||||||
]
|
|
||||||
])
|
|
||||||
(bezier "almostLinear" [
|
|
||||||
[
|
|
||||||
0.5
|
|
||||||
0.5
|
|
||||||
]
|
|
||||||
[
|
|
||||||
0.75
|
|
||||||
1
|
|
||||||
]
|
|
||||||
])
|
|
||||||
(bezier "quick" [
|
|
||||||
[
|
|
||||||
0.15
|
|
||||||
0
|
|
||||||
]
|
|
||||||
[
|
|
||||||
0.1
|
|
||||||
1
|
|
||||||
]
|
|
||||||
])
|
|
||||||
];
|
|
||||||
|
|
||||||
animation = [
|
|
||||||
{
|
|
||||||
leaf = "global";
|
|
||||||
enabled = true;
|
|
||||||
speed = 10;
|
|
||||||
bezier = "default";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "border";
|
|
||||||
enabled = true;
|
|
||||||
speed = 5.39;
|
|
||||||
bezier = "easeOutQuint";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "windows";
|
|
||||||
enabled = true;
|
|
||||||
speed = 2.79;
|
|
||||||
bezier = "easeOutQuint";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "windowsIn";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "easeOutQuint";
|
|
||||||
style = "popin 87%";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "windowsOut";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "linear";
|
|
||||||
style = "popin 87%";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "windowsMove";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "easeInOutCubic";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fadeIn";
|
|
||||||
enabled = true;
|
|
||||||
speed = 0.5;
|
|
||||||
bezier = "almostLinear";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fadeOut";
|
|
||||||
enabled = true;
|
|
||||||
speed = 0.5;
|
|
||||||
bezier = "almostLinear";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fade";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "quick";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "layers";
|
|
||||||
enabled = true;
|
|
||||||
speed = 3.81;
|
|
||||||
bezier = "easeOutQuint";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "layersIn";
|
|
||||||
enabled = true;
|
|
||||||
speed = 4;
|
|
||||||
bezier = "easeOutQuint";
|
|
||||||
style = "fade";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "layersOut";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1.5;
|
|
||||||
bezier = "linear";
|
|
||||||
style = "fade";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fadeLayersIn";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1.79;
|
|
||||||
bezier = "almostLinear";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fadeLayersOut";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1.39;
|
|
||||||
bezier = "almostLinear";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "workspaces";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "almostLinear";
|
|
||||||
style = "slide";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "workspacesIn";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "easeInOutCubic";
|
|
||||||
style = "slide";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "workspacesOut";
|
|
||||||
enabled = true;
|
|
||||||
speed = 1;
|
|
||||||
bezier = "easeInOutCubic";
|
|
||||||
style = "slide";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "zoomFactor";
|
|
||||||
enabled = true;
|
|
||||||
speed = 7;
|
|
||||||
bezier = "quick";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
bind = [
|
|
||||||
(bind "${mainMod} + R" (dsp ''hl.dsp.exec_cmd("${mreowScript}")''))
|
|
||||||
(bind "${mainMod} + C" (dsp "hl.dsp.window.close()"))
|
|
||||||
(bind "${mainMod} + M" (dsp ''hl.dsp.exec_cmd("uwsm stop")''))
|
|
||||||
(bind "${mainMod} + Q" (dsp ''hl.dsp.exec_cmd("kitty")''))
|
|
||||||
(bind "${mainMod} + V" (dsp ''hl.dsp.window.float({ action = "toggle" })''))
|
|
||||||
(bind "${mainMod} + left" (dsp ''hl.dsp.focus({ direction = "left" })''))
|
|
||||||
(bind "${mainMod} + right" (dsp ''hl.dsp.focus({ direction = "right" })''))
|
|
||||||
(bind "${mainMod} + up" (dsp ''hl.dsp.focus({ direction = "up" })''))
|
|
||||||
(bind "${mainMod} + down" (dsp ''hl.dsp.focus({ direction = "down" })''))
|
|
||||||
(bind "${mainMod} + L" (dsp ''hl.dsp.exec_cmd("wlogout")''))
|
|
||||||
(bind "${mainMod} + S" (dsp ''hl.dsp.exec_cmd("wayfreeze --after-freeze-cmd '${meowScript}'")''))
|
|
||||||
(bind "${mainMod} + F" (dsp ''hl.dsp.window.fullscreen({ action = "toggle" })''))
|
|
||||||
(bind "${mainMod} + SHIFT + Q" (dsp "hl.dsp.window.close()"))
|
|
||||||
(bind "${mainMod} + mouse_down" (dsp ''hl.dsp.focus({ workspace = "e+1" })''))
|
|
||||||
(bind "${mainMod} + mouse_up" (dsp ''hl.dsp.focus({ workspace = "e-1" })''))
|
|
||||||
|
|
||||||
# Mouse binds
|
|
||||||
(bind "${mainMod} + mouse:272" (dsp "hl.dsp.window.drag()"))
|
|
||||||
(bind "${mainMod} + mouse:273" (dsp "hl.dsp.window.resize()"))
|
|
||||||
|
|
||||||
# Media keys
|
|
||||||
(bind "XF86AudioLowerVolume" (dsp ''hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-")''))
|
|
||||||
(bind "XF86AudioRaiseVolume" (dsp ''hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+")''))
|
|
||||||
(bind "XF86AudioMute" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")''))
|
|
||||||
(bind "XF86AudioPlay" (dsp ''hl.dsp.exec_cmd("playerctl play-pause")''))
|
|
||||||
(bind "XF86AudioNext" (dsp ''hl.dsp.exec_cmd("playerctl next")''))
|
|
||||||
(bind "XF86AudioPrev" (dsp ''hl.dsp.exec_cmd("playerctl previous")''))
|
|
||||||
(bind "XF86AudioMicMute" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle")''))
|
|
||||||
(bind "home" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")''))
|
|
||||||
(bind "end" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle")''))
|
|
||||||
(bind "F8" (dsp "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })"))
|
|
||||||
|
|
||||||
# Workspaces
|
|
||||||
(bind "${mainMod} + 0" (dsp "hl.dsp.focus({ workspace = 10 })"))
|
|
||||||
(bind "${mainMod} + SHIFT + 0" (dsp "hl.dsp.window.move({ workspace = 10 })"))
|
|
||||||
]
|
|
||||||
++ wsBinds;
|
|
||||||
|
|
||||||
window_rule = [
|
|
||||||
{ suppress_event = "maximize"; }
|
|
||||||
{
|
|
||||||
match.class = "gamescope";
|
|
||||||
workspace = "5";
|
|
||||||
immediate = true;
|
|
||||||
confine_pointer = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = "OBS Studio Crash Detected";
|
|
||||||
pin = true;
|
|
||||||
}
|
|
||||||
# Steam, Discord (equibop), Telegram, Spotify and OBS
|
|
||||||
# always open on their own workspace regardless of how
|
|
||||||
# they were launched. These sit before the "Discord
|
|
||||||
# Popout" rule: window rules apply in declaration order
|
|
||||||
# and the last match wins, so popouts still land on
|
|
||||||
# workspace 1.
|
|
||||||
{
|
|
||||||
match.class = "steam";
|
|
||||||
workspace = "6 silent";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "equibop";
|
|
||||||
workspace = "8 silent";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "org.telegram.desktop";
|
|
||||||
workspace = "8 silent";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "spotify";
|
|
||||||
workspace = "9 silent";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "com.obsproject.Studio";
|
|
||||||
workspace = "10 silent";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = "Discord Popout";
|
|
||||||
workspace = "1 silent";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
layer_rule = [
|
|
||||||
{
|
|
||||||
match.namespace = "notifications";
|
|
||||||
no_screen_share = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Host-specific overrides: load ~/.config/hypr/hyprland-local.lua
|
|
||||||
# if present (must be valid Lua). Runs last so a host can override
|
|
||||||
# anything set above.
|
|
||||||
extraConfig = ''
|
|
||||||
local home = os.getenv("HOME")
|
|
||||||
if home then
|
|
||||||
local localPath = home .. '/.config/hypr/hyprland-local.lua'
|
|
||||||
local f = io.open(localPath, 'r')
|
|
||||||
if f then
|
|
||||||
f:close()
|
|
||||||
local chunk, err = loadfile(localPath)
|
|
||||||
if chunk then chunk() else io.stderr:write('hyprland-local.lua error: ' .. err .. '\n') end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,12 +52,9 @@
|
|||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
# backupFileExtension = "backupHM";
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd.enable = true;
|
|
||||||
systemd.variables = [ "--all" ];
|
systemd.variables = [ "--all" ];
|
||||||
configType = "lua";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
flake-file.inputs = {
|
|
||||||
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
|
|
||||||
};
|
|
||||||
modules.hytale-launcher = {
|
|
||||||
homeManager =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = [
|
|
||||||
inputs.hytale-launcher.packages.${pkgs.system}.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
{
|
{ den, modules, ... }:
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
{
|
||||||
modules.kitty = {
|
modules.kitty = {
|
||||||
homeManager = {
|
homeManager = {
|
||||||
@@ -16,10 +12,6 @@
|
|||||||
sync_to_monitor = "yes";
|
sync_to_monitor = "yes";
|
||||||
background_opacity = 0.6;
|
background_opacity = 0.6;
|
||||||
cursor_trail = 1;
|
cursor_trail = 1;
|
||||||
auto_reload_config = -1;
|
|
||||||
# input_delay = 1;
|
|
||||||
# repaint_delay = 2;
|
|
||||||
wayland_enable_ime = "no";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
modules,
|
modules,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
flake-file.inputs = {
|
flake-file.inputs = {
|
||||||
nik-pkgs = {
|
nik-pkgs = {
|
||||||
url = "git+https://git.scug.io/nikkuss/pkgs.git?ref=main";
|
url = "git+https://git.scug.io/nikkuss/pkgs.git";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -14,6 +15,5 @@
|
|||||||
nixos = {
|
nixos = {
|
||||||
nixpkgs.overlays = [ inputs.nik-pkgs.overlays.default ];
|
nixpkgs.overlays = [ inputs.nik-pkgs.overlays.default ];
|
||||||
};
|
};
|
||||||
# debug = inputs.nik-pkgs;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-25
@@ -24,19 +24,19 @@
|
|||||||
systemd
|
systemd
|
||||||
|
|
||||||
# My own additions
|
# My own additions
|
||||||
libxcomposite
|
xorg.libXcomposite
|
||||||
libxtst
|
xorg.libXtst
|
||||||
libxrandr
|
xorg.libXrandr
|
||||||
libxext
|
xorg.libXext
|
||||||
libx11
|
xorg.libX11
|
||||||
libxfixes
|
xorg.libXfixes
|
||||||
libGL
|
libGL
|
||||||
libva
|
libva
|
||||||
pipewire
|
pipewire
|
||||||
libxcb
|
xorg.libxcb
|
||||||
libxdamage
|
xorg.libXdamage
|
||||||
libxshmfence
|
xorg.libxshmfence
|
||||||
libxxf86vm
|
xorg.libXxf86vm
|
||||||
libelf
|
libelf
|
||||||
|
|
||||||
# Required
|
# Required
|
||||||
@@ -56,14 +56,14 @@
|
|||||||
# glibc_multi.bin # Seems to cause issue in ARM
|
# glibc_multi.bin # Seems to cause issue in ARM
|
||||||
|
|
||||||
# # Without these it silently fails
|
# # Without these it silently fails
|
||||||
libxinerama
|
xorg.libXinerama
|
||||||
libxcursor
|
xorg.libXcursor
|
||||||
libxrender
|
xorg.libXrender
|
||||||
libxscrnsaver
|
xorg.libXScrnSaver
|
||||||
libxi
|
xorg.libXi
|
||||||
libsm
|
xorg.libSM
|
||||||
libice
|
xorg.libICE
|
||||||
# gnome2.GConf
|
gnome2.GConf
|
||||||
nspr
|
nspr
|
||||||
nss
|
nss
|
||||||
cups
|
cups
|
||||||
@@ -88,13 +88,13 @@
|
|||||||
# other issue: (Unity:377230): GLib-GIO-CRITICAL **: 21:09:04.706: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed
|
# other issue: (Unity:377230): GLib-GIO-CRITICAL **: 21:09:04.706: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed
|
||||||
|
|
||||||
# Verified games requirements
|
# Verified games requirements
|
||||||
libxt
|
xorg.libXt
|
||||||
libxmu
|
xorg.libXmu
|
||||||
libogg
|
libogg
|
||||||
libvorbis
|
libvorbis
|
||||||
SDL
|
SDL
|
||||||
SDL2_image
|
SDL2_image
|
||||||
glew_1_10
|
glew110
|
||||||
libidn
|
libidn
|
||||||
tbb
|
tbb
|
||||||
|
|
||||||
@@ -115,15 +115,15 @@
|
|||||||
SDL_mixer
|
SDL_mixer
|
||||||
SDL2_ttf
|
SDL2_ttf
|
||||||
SDL2_mixer
|
SDL2_mixer
|
||||||
# libappindicator-gtk2
|
libappindicator-gtk2
|
||||||
# libdbusmenu-gtk2
|
libdbusmenu-gtk2
|
||||||
# libindicator-gtk2
|
libindicator-gtk2
|
||||||
libcaca
|
libcaca
|
||||||
libcanberra
|
libcanberra
|
||||||
libgcrypt
|
libgcrypt
|
||||||
libvpx
|
libvpx
|
||||||
librsvg
|
librsvg
|
||||||
libxft
|
xorg.libXft
|
||||||
libvdpau
|
libvdpau
|
||||||
# ...
|
# ...
|
||||||
# Some more libraries that I needed to run programs
|
# Some more libraries that I needed to run programs
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{...}: {
|
{ ... }:
|
||||||
flake-file.inputs = {
|
{
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
};
|
|
||||||
modules.nix = {
|
modules.nix = {
|
||||||
nixos = {...}: {
|
nixos =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
extra-substituters = [
|
substituters = [
|
||||||
"https://hyprland.cachix.org"
|
"https://hyprland.cachix.org"
|
||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
"https://cache.nixos.org/"
|
"https://cache.nixos.org/"
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
"https://cache.nixos-cuda.org"
|
"https://cache.nixos-cuda.org"
|
||||||
"https://niri.cachix.org"
|
"https://niri.cachix.org"
|
||||||
"https://attic.xuyh0120.win/lantian"
|
"https://attic.xuyh0120.win/lantian"
|
||||||
"https://nixos-raspberrypi.cachix.org"
|
|
||||||
];
|
];
|
||||||
trusted-public-keys = [
|
trusted-public-keys = [
|
||||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
@@ -23,7 +22,6 @@
|
|||||||
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
||||||
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
|
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
|
||||||
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
|
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
|
||||||
"nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI="
|
|
||||||
];
|
];
|
||||||
experimental-features = [
|
experimental-features = [
|
||||||
"flakes"
|
"flakes"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
flake-file.inputs = {
|
flake-file.inputs = {
|
||||||
nixvim = {
|
nixvim = {
|
||||||
url = "github:nix-community/nixvim";
|
url = "github:nix-community/nixvim";
|
||||||
|
# inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
modules = {
|
modules = {
|
||||||
@@ -20,29 +21,6 @@
|
|||||||
};
|
};
|
||||||
homeManager =
|
homeManager =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
let
|
|
||||||
tiny-code-action = pkgs.vimUtils.buildVimPlugin {
|
|
||||||
name = "tiny-code-action.nvim";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "rachartier";
|
|
||||||
repo = "tiny-code-action.nvim";
|
|
||||||
rev = "0d040ed81f7953118b81cd12681fcdfcac069803";
|
|
||||||
hash = "sha256-UF9zeO5Uujdt2MEwy2d2Lhk6JRnEN4vrEvYslv0/zaA";
|
|
||||||
};
|
|
||||||
nvimSkipModules = [ "tiny-code-action.previewers.snacks" ];
|
|
||||||
};
|
|
||||||
cmp-lsp-rs = pkgs.vimUtils.buildVimPlugin {
|
|
||||||
name = "nvim-cmp-lsp-rs";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "zjp-CN";
|
|
||||||
repo = "nvim-cmp-lsp-rs";
|
|
||||||
rev = "329075b806deb719d3ce4f55a7e443541ce5289d";
|
|
||||||
hash = "sha256-rBABhsShCrx7Gofm1mC6DQAL0KeNtQidW9eMr9kfwGI=";
|
|
||||||
};
|
|
||||||
# nvim-cmp on rtp during the require check (cmp_lsp_rs requires cmp.types.lsp at load time)
|
|
||||||
dependencies = [ pkgs.vimPlugins.nvim-cmp ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.nixvim.homeModules.nixvim
|
inputs.nixvim.homeModules.nixvim
|
||||||
@@ -54,25 +32,17 @@
|
|||||||
config = {
|
config = {
|
||||||
allowUnfree = true;
|
allowUnfree = true;
|
||||||
};
|
};
|
||||||
source = inputs.nixpkgs;
|
|
||||||
};
|
};
|
||||||
colorschemes.gruvbox-material.enable = true;
|
colorschemes.gruvbox-material.enable = true;
|
||||||
# colorschemes.melange = {
|
|
||||||
# enable = true;
|
|
||||||
# autoLoad = false;
|
|
||||||
# };
|
|
||||||
dependencies.rust-analyzer.enable = false;
|
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
# formatters
|
# formatters
|
||||||
nixfmt-rs
|
nixfmt
|
||||||
rustfmt
|
rustfmt
|
||||||
# misc
|
# misc
|
||||||
ripgrep
|
ripgrep
|
||||||
|
# misc
|
||||||
nixd
|
nixd
|
||||||
tree-sitter
|
tree-sitter
|
||||||
# rust-analyzer
|
|
||||||
# rustc
|
|
||||||
# cargo
|
|
||||||
];
|
];
|
||||||
performance.byteCompileLua = {
|
performance.byteCompileLua = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -82,15 +52,10 @@
|
|||||||
configs = true;
|
configs = true;
|
||||||
};
|
};
|
||||||
plugins = {
|
plugins = {
|
||||||
luasnip.enable = true;
|
|
||||||
cmp_luasnip.enable = true;
|
|
||||||
fidget.enable = true;
|
|
||||||
mini-comment.enable = true;
|
|
||||||
# cord.enable = true;
|
|
||||||
todo-comments.enable = true;
|
todo-comments.enable = true;
|
||||||
|
lsp-status.enable = true;
|
||||||
transparent.enable = true;
|
transparent.enable = true;
|
||||||
which-key.enable = true;
|
which-key.enable = true;
|
||||||
snacks.enable = true;
|
|
||||||
conform-nvim = {
|
conform-nvim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
@@ -118,59 +83,44 @@
|
|||||||
# };
|
# };
|
||||||
# };
|
# };
|
||||||
# };
|
# };
|
||||||
rustaceanvim = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
server = {
|
|
||||||
default_settings = {
|
|
||||||
rust-analyzer = {
|
|
||||||
cargo.targetDir = true;
|
|
||||||
diagnostics.refresh_update = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
lsp = {
|
lsp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
onAttach = ''
|
|
||||||
if client.name == "rust-analyzer" then
|
|
||||||
client.server_capabilities.semanticTokensProvider = nil
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
servers = {
|
servers = {
|
||||||
# qmlls = {
|
qmlls = {
|
||||||
# enable = true;
|
enable = true;
|
||||||
# config = {
|
config = {
|
||||||
# cmd = "-E";
|
cmd = "-E";
|
||||||
# };
|
};
|
||||||
# };
|
};
|
||||||
# rust_analyzer = {
|
rust_analyzer = {
|
||||||
# enable = true;
|
enable = true;
|
||||||
# installCargo = false;
|
installCargo = false;
|
||||||
# installRustc = false;
|
installRustc = false;
|
||||||
# };
|
};
|
||||||
nixd = {
|
nixd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
|
||||||
nixd = {
|
|
||||||
nixpkgs.expr = "import (builtins.getFlake \"${toString /home/doloro/dotfiles}\").inputs.nixpkgs { }";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
astro = {
|
astro = {
|
||||||
enable = false;
|
enable = true;
|
||||||
};
|
};
|
||||||
ts_ls = {
|
ts_ls = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
cssls = {
|
cssls.enable = true;
|
||||||
enable = true;
|
|
||||||
package = pkgs.vscode-langservers-extracted;
|
|
||||||
};
|
|
||||||
svelte.enable = true;
|
svelte.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
lsp-format = {
|
||||||
|
enable = true;
|
||||||
|
# lspServersToEnable = [ "qmlls" ];
|
||||||
|
};
|
||||||
|
notify = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
background_color = "#00000000";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mini-cursorword.enable = true;
|
||||||
# mini-statusline.enable = true;
|
# mini-statusline.enable = true;
|
||||||
lualine = {
|
lualine = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -188,7 +138,7 @@
|
|||||||
"fileformat"
|
"fileformat"
|
||||||
"filetype"
|
"filetype"
|
||||||
];
|
];
|
||||||
lualine_y = [ "progress" ];
|
lualine_y = [ "lsp_status" ];
|
||||||
lualine_z = [ "location" ];
|
lualine_z = [ "location" ];
|
||||||
};
|
};
|
||||||
inactive_sections = {
|
inactive_sections = {
|
||||||
@@ -202,6 +152,8 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
web-devicons.enable = true;
|
web-devicons.enable = true;
|
||||||
|
vim-dadbod-completion.enable = true;
|
||||||
|
telescope.enable = true;
|
||||||
lazygit.enable = true;
|
lazygit.enable = true;
|
||||||
mini-indentscope = {
|
mini-indentscope = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -219,46 +171,15 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
trouble = {
|
trouble.enable = true;
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
auto_close = true;
|
|
||||||
use_diagnostic_signs = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
cmp = {
|
cmp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autoEnableSources = true;
|
autoEnableSources = true;
|
||||||
cmdline = {
|
|
||||||
":" = {
|
|
||||||
mapping.__raw = "cmp.mapping.preset.cmdline()";
|
|
||||||
sources = [
|
|
||||||
{ name = "cmdline"; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
"/" = {
|
|
||||||
mapping.__raw = "cmp.mapping.preset.cmdline()";
|
|
||||||
sources = [
|
|
||||||
{ name = "buffer"; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
settings = {
|
settings = {
|
||||||
snippet.expand.__raw = "function(args) require('luasnip').lsp_expand(args.body) end";
|
|
||||||
sources = [
|
sources = [
|
||||||
{
|
{ name = "nvim_lsp"; }
|
||||||
name = "nvim_lsp";
|
{ name = "path"; }
|
||||||
priority = 100;
|
{ name = "buffer"; }
|
||||||
entry_filter = "require('cmp_lsp_rs').filter_out.rust_entry_filter";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "luasnip";
|
|
||||||
priority = 75;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "buffer";
|
|
||||||
priority = 50;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
mapping = {
|
mapping = {
|
||||||
"<C-Space>" = "cmp.mapping.complete()";
|
"<C-Space>" = "cmp.mapping.complete()";
|
||||||
@@ -266,43 +187,27 @@
|
|||||||
"<C-e>" = "cmp.mapping.close()";
|
"<C-e>" = "cmp.mapping.close()";
|
||||||
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
"<C-f>" = "cmp.mapping.scroll_docs(4)";
|
||||||
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||||
"<S-Tab>" =
|
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
|
||||||
"cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif require('luasnip').jumpable(-1) then require('luasnip').jump(-1) else fallback() end end, {'i', 's'})";
|
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
|
||||||
"<Tab>" =
|
|
||||||
"cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif require('luasnip').expand_or_jumpable() then require('luasnip').expand_or_jump() else fallback() end end, {'i', 's'})";
|
|
||||||
};
|
|
||||||
sorting = {
|
|
||||||
comparators = [
|
|
||||||
"require('cmp.config.compare').exact"
|
|
||||||
"require('cmp.config.compare').score"
|
|
||||||
"require('cmp_lsp_rs').comparators.inscope_inherent_import"
|
|
||||||
"require('cmp_lsp_rs').comparators.sort_by_label_but_underscore_last"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
window = {
|
|
||||||
completion = {
|
|
||||||
border = "rounded";
|
|
||||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None";
|
|
||||||
};
|
|
||||||
documentation = {
|
|
||||||
border = "rounded";
|
|
||||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
lspkind.enable = true;
|
lspkind.enable = true;
|
||||||
tiny-inline-diagnostic.enable = true;
|
tiny-inline-diagnostic.enable = true;
|
||||||
# tiny-code-action.enable = true;
|
|
||||||
# persisted.enable = true;
|
# persisted.enable = true;
|
||||||
|
auto-session = {
|
||||||
|
enable = false;
|
||||||
|
settings = {
|
||||||
|
enabled = true;
|
||||||
|
auto_save = true;
|
||||||
|
auto_restore = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
wakatime.enable = true;
|
wakatime.enable = true;
|
||||||
treesitter = {
|
treesitter = {
|
||||||
enable = true;
|
enable = true;
|
||||||
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
|
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
|
||||||
bash
|
bash
|
||||||
css
|
|
||||||
html
|
|
||||||
javascript
|
|
||||||
json
|
json
|
||||||
lua
|
lua
|
||||||
make
|
make
|
||||||
@@ -311,8 +216,6 @@
|
|||||||
nix
|
nix
|
||||||
regex
|
regex
|
||||||
toml
|
toml
|
||||||
tsx
|
|
||||||
typescript
|
|
||||||
vim
|
vim
|
||||||
vimdoc
|
vimdoc
|
||||||
xml
|
xml
|
||||||
@@ -321,13 +224,15 @@
|
|||||||
];
|
];
|
||||||
settings = {
|
settings = {
|
||||||
highlight.enable = true;
|
highlight.enable = true;
|
||||||
indent.enable = false;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
extraPlugins = with pkgs; [
|
extraPlugins = with pkgs; [
|
||||||
tiny-code-action
|
# vimPlugins.mini-completion
|
||||||
cmp-lsp-rs
|
vimPlugins.mini-comment
|
||||||
|
vimPlugins.melange-nvim
|
||||||
|
vimPlugins.telescope-file-browser-nvim
|
||||||
|
vimPlugins.lsp-progress-nvim
|
||||||
];
|
];
|
||||||
opts = {
|
opts = {
|
||||||
number = true;
|
number = true;
|
||||||
@@ -335,31 +240,20 @@
|
|||||||
tabstop = 2;
|
tabstop = 2;
|
||||||
shiftwidth = 2;
|
shiftwidth = 2;
|
||||||
termguicolors = true;
|
termguicolors = true;
|
||||||
completeopt = "menu,menuone,noselect";
|
|
||||||
};
|
};
|
||||||
globals = {
|
globals = {
|
||||||
mapleader = " ";
|
mapleader = " ";
|
||||||
};
|
};
|
||||||
extraConfigLua = ''
|
|
||||||
-- LSP client writes server stderr + errors to disk on the main loop; nixd spams info logs -> 5MB+ logs.
|
|
||||||
-- warn level: captures server stderr (incl. rust-analyzer slow-request timing) without nixd's info spam.
|
|
||||||
vim.lsp.set_log_level("warn")
|
|
||||||
-- tree-sitter-nix uses (#is-not? local) which the new nvim-treesitter main branch no longer registers
|
|
||||||
vim.treesitter.query.add_predicate("is-not?", function() return true end, { force = true })
|
|
||||||
|
|
||||||
require('tiny-code-action').setup({
|
|
||||||
backend = 'vim',
|
|
||||||
picker = 'snacks',
|
|
||||||
resolve_timeout = 100,
|
|
||||||
notify = {
|
|
||||||
enabled = true,
|
|
||||||
on_empty = true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
'';
|
|
||||||
keymaps = [
|
keymaps = [
|
||||||
{
|
{
|
||||||
action = "<cmd>lua require('snacks.picker').files()<cr>";
|
action = "<cmd>Telescope persisted<cr>";
|
||||||
|
key = "<leader>fs";
|
||||||
|
options = {
|
||||||
|
silent = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "<cmd>Telescope find_files<cr>";
|
||||||
key = "<leader>ff";
|
key = "<leader>ff";
|
||||||
options = {
|
options = {
|
||||||
silent = true;
|
silent = true;
|
||||||
@@ -380,14 +274,14 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
action = "<cmd>lua require('snacks.picker').buffers()<cr>";
|
action = "<cmd>Telescope buffers<cr>";
|
||||||
key = "<leader>fb";
|
key = "<leader>fb";
|
||||||
options = {
|
options = {
|
||||||
silent = true;
|
silent = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
action = "<cmd>lua require('snacks.picker').grep()<cr>";
|
action = "<cmd>Telescope live_grep<cr>";
|
||||||
key = "<leader>fg";
|
key = "<leader>fg";
|
||||||
options = {
|
options = {
|
||||||
silent = true;
|
silent = true;
|
||||||
@@ -398,111 +292,6 @@
|
|||||||
key = "<leader>fd";
|
key = "<leader>fd";
|
||||||
options = {
|
options = {
|
||||||
silent = true;
|
silent = true;
|
||||||
desc = "Toggle diagnostics (Trouble)";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua require('tiny-code-action').code_action()<cr>";
|
|
||||||
key = "<leader>ca";
|
|
||||||
mode = [
|
|
||||||
"n"
|
|
||||||
"x"
|
|
||||||
];
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
# LSP
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.definition()<cr>";
|
|
||||||
key = "gd";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Go to definition";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.declaration()<cr>";
|
|
||||||
key = "gD";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Go to declaration";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.implementation()<cr>";
|
|
||||||
key = "gi";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Go to implementation";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.type_definition()<cr>";
|
|
||||||
key = "<leader>D";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Go to type definition";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua require('snacks.picker').lsp_references()<cr>";
|
|
||||||
key = "gr";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "LSP references";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.hover()<cr>";
|
|
||||||
key = "K";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Hover docs";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.signature_help()<cr>";
|
|
||||||
key = "<C-k>";
|
|
||||||
mode = [
|
|
||||||
"n"
|
|
||||||
"i"
|
|
||||||
];
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Signature help";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.lsp.buf.rename()<cr>";
|
|
||||||
key = "<leader>rn";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Rename symbol";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.diagnostic.goto_prev()<cr>";
|
|
||||||
key = "[d";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Previous diagnostic";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.diagnostic.goto_next()<cr>";
|
|
||||||
key = "]d";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Next diagnostic";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "<cmd>lua vim.diagnostic.open_float()<cr>";
|
|
||||||
key = "<leader>e";
|
|
||||||
options = {
|
|
||||||
silent = true;
|
|
||||||
desc = "Show diagnostic float";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
+7
-26
@@ -1,8 +1,4 @@
|
|||||||
{
|
{ den, modules, ... }:
|
||||||
den,
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
{
|
||||||
modules.obs = settings: {
|
modules.obs = settings: {
|
||||||
homeManager =
|
homeManager =
|
||||||
@@ -16,29 +12,14 @@
|
|||||||
programs = {
|
programs = {
|
||||||
obs-studio = {
|
obs-studio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = (
|
package = (
|
||||||
# (pkgs.obs-studio.overrideAttrs (old: {
|
pkgs.obs-studio.override {
|
||||||
# version = "32.2.0-beta2-unstable";
|
cudaSupport = true;
|
||||||
# src = pkgs.fetchFromGitHub {
|
}
|
||||||
# owner = "obsproject";
|
);
|
||||||
# repo = "obs-studio";
|
|
||||||
# rev = "27ac23ef750aafb2bb7ddd499ede5755a5a3087f";
|
|
||||||
# hash = "sha256-3wPHNgYzR+ZIbCYMh5ocyK/nsQxy24Wfa03kheYOU88=";
|
|
||||||
# fetchSubmodules = true;
|
|
||||||
# };
|
|
||||||
# cmakeFlags = (old.cmakeFlags or []) ++ [
|
|
||||||
# "-DOBS_VERSION_OVERRIDE=32.2.0-beta2"
|
|
||||||
# ];
|
|
||||||
# })).override
|
|
||||||
# {
|
|
||||||
# cudaSupport = true;
|
|
||||||
# }
|
|
||||||
# );
|
|
||||||
package = pkgs.obs-studio.override { cudaSupport = true; };
|
|
||||||
plugins = with pkgs.obs-studio-plugins; [
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
obs-pipewire-audio-capture
|
obs-pipewire-audio-capture
|
||||||
obs-vkcapture
|
obs-vkcapture
|
||||||
obs-gstreamer
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -82,7 +63,7 @@
|
|||||||
lib.mergeAttrsList [ audio-set ];
|
lib.mergeAttrsList [ audio-set ];
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
# exec-once = ["${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer"];
|
exec-once = [ "${config.programs.obs-studio.finalPackage}/bin/obs --startreplaybuffer" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
};
|
};
|
||||||
# Most energy efficent scheduler setup..
|
# Most energy efficent scheduler setup..
|
||||||
systemd.services.scx.environment = {
|
systemd.services.scx.environment = {
|
||||||
# SCX_SCHEDULER_OVERRIDE = "scx_lavd";
|
SCX_SCHEDULER_OVERRIDE = "scx_lavd";
|
||||||
# SCX_FLAGS_OVERRIDE = "--powersave --no-core-compaction";
|
SCX_FLAGS_OVERRIDE = "--powersave --cpu-pref-order=0-4,5-11";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
{ modules, ... }:
|
|
||||||
{
|
|
||||||
modules.printing = {
|
|
||||||
nixos =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
services.avahi = {
|
|
||||||
enable = true;
|
|
||||||
nssmdns4 = true;
|
|
||||||
openFirewall = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.printing = {
|
|
||||||
enable = true;
|
|
||||||
drivers = with pkgs; [
|
|
||||||
cups-filters
|
|
||||||
cups-browsed
|
|
||||||
brlaser
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
homeManager =
|
|
||||||
{ ... }:
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -11,17 +11,12 @@
|
|||||||
{
|
{
|
||||||
programs.quickshell = {
|
programs.quickshell = {
|
||||||
systemd.enable = true;
|
systemd.enable = true;
|
||||||
systemd.target = "hyprland-session.target";
|
|
||||||
enable = true;
|
enable = true;
|
||||||
activeConfig = "main";
|
activeConfig = "main";
|
||||||
configs = {
|
configs = {
|
||||||
main = config.lib.file.mkOutOfStoreSymlink "/home/doloro/dotfiles/config/modules/quickshell/quickshell";
|
main = config.lib.file.mkOutOfStoreSymlink "/home/doloro/dotfiles/config/modules/quickshell/quickshell";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
# systemd.user.services.quickshell = {
|
|
||||||
# partOf = [ "hyprland-session.target" ];
|
|
||||||
# after = [ "hyprland-session.target" ];
|
|
||||||
# };
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
/run/user/1000/quickshell/vfs/ca6d8e2cdd46bffdf799708f31d409fa/.qmlls.ini
|
/run/user/1000/quickshell/vfs/6e389f6b800776b0595d9d90e42ebd04/.qmlls.ini
|
||||||
@@ -22,31 +22,15 @@ Rectangle {
|
|||||||
id: content
|
id: content
|
||||||
height: 20
|
height: 20
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
spacing: 4
|
|
||||||
Rectangle {
|
|
||||||
implicitWidth: 24
|
|
||||||
implicitHeight: 20
|
|
||||||
color: "transparent"
|
|
||||||
Text {
|
Text {
|
||||||
anchors.centerIn: parent
|
id: speaker
|
||||||
text: root.defaultSpeaker.audio.muted ? "" : ""
|
text: root.defaultSpeaker.audio.muted ? "muted" : "unmuted"
|
||||||
font.family: "CaskaydiaCove NF"
|
|
||||||
font.pixelSize: 20
|
|
||||||
color: Colors.textPrimary
|
color: Colors.textPrimary
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Rectangle {
|
|
||||||
implicitWidth: 24
|
|
||||||
implicitHeight: 20
|
|
||||||
color: "transparent"
|
|
||||||
radius: 3
|
|
||||||
Text {
|
Text {
|
||||||
anchors.centerIn: parent
|
id: mic
|
||||||
text: root.defaultMic.audio.muted ? "" : ""
|
text: root.defaultMic.audio.muted ? "muted" : "unmuted"
|
||||||
font.family: "CaskaydiaCove NFM"
|
|
||||||
font.pixelSize: 30
|
|
||||||
color: Colors.textPrimary
|
color: Colors.textPrimary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,28 +7,33 @@
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
flake-file.inputs = {
|
flake-file.inputs = {
|
||||||
raspberry-pi-nix.url = "github:cmyk/raspberry-pi-nix";
|
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
|
||||||
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main";
|
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
|
||||||
};
|
};
|
||||||
modules.raspberry-pi = {
|
modules.raspberry-pi = {
|
||||||
provides = {
|
provides = {
|
||||||
"5" = {
|
"5" = {
|
||||||
nixos =
|
nixos =
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
rpi-pi = inputs.raspberry-pi-nix;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
inputs.nixos-hardware.nixosModules.raspberry-pi-5
|
rpi-pi.nixosModules.raspberry-pi
|
||||||
|
rpi-pi.nixosModules.sd-image
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages;
|
|
||||||
boot.kernel.sysctl."vm.mmap_rnd_bits" = pkgs.lib.mkForce 16;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
libraspberrypi
|
libraspberrypi
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.supportedFilesystems.zfs = false;
|
sdImage.compressImage = false;
|
||||||
|
raspberry-pi-nix.board = "bcm2712"; # Rpi 5 - 64bit
|
||||||
|
# We need to rebuild kernel for 6.12
|
||||||
|
# raspberry-pi-nix.kernel-version = "v6_12_17";
|
||||||
|
raspberry-pi-nix.uboot.enable = false;
|
||||||
|
|
||||||
|
hardware.enableRedistributableFirmware = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,75 +3,72 @@ root-hashed_password: ENC[AES256_GCM,data:vzVtz1Ht4XD+omdKjU/Zvoaftq8jKE4kxOjAGZ
|
|||||||
wakatime-scug-io-api-key: ENC[AES256_GCM,data:XQUccNW4210U8ZpHSGVcsdbAirzyTvmcy4y6emk7n4N6MO/W,iv:9/f9ceLshA7l8hJB+IDIPvEwYwSkFlPOLmpvtYXLTpU=,tag:x7hESZCouzYVNef2C+iCSA==,type:str]
|
wakatime-scug-io-api-key: ENC[AES256_GCM,data:XQUccNW4210U8ZpHSGVcsdbAirzyTvmcy4y6emk7n4N6MO/W,iv:9/f9ceLshA7l8hJB+IDIPvEwYwSkFlPOLmpvtYXLTpU=,tag:x7hESZCouzYVNef2C+iCSA==,type:str]
|
||||||
meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmyQ=,tag:0gu9FNOrjQ8fpB+B+RbGSg==,type:str]
|
meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmyQ=,tag:0gu9FNOrjQ8fpB+B+RbGSg==,type:str]
|
||||||
meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str]
|
meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str]
|
||||||
scug-io-ai-key: ENC[AES256_GCM,data:b2AT2+A5eoGa1eZsCYKDFg449sOgffDcQA==,iv:NDIS3x1unq6/UtjtsyBTHx5v12utagDA3BbNzs5v3L0=,tag:MhbJGATIDWyOZUqXqRAeVA==,type:str]
|
|
||||||
opencode-go-zen-key: ENC[AES256_GCM,data:fwgV/QK+4tpizC6J3evbGxD57BQCWn5Eyex7iIeNYCQHk6ZD8eTukqhUbLcfXyO4RQot3B1B2xbQVVBsuOWWcQYQKA==,iv:aKwQM8d0gP+MyuqWFk2VfOWDgKPcE/HAvL0I0r6o1nU=,tag:/AeSgscy0mxUMwoP8LaCXg==,type:str]
|
|
||||||
commandcode-key: ENC[AES256_GCM,data:LJBlDoYslglFOpJnySLdPx5sEv67wR/EzJahQh6rvMyCrSCLjqH8oErynYCaGjbAh5Rh+rKxp9vmnv03rxQiL114gxBipqUmzrr9lSUfesyZ2krhljFf6WFen2Q=,iv:IAP72IShIZoJEVdppGSl3/J5BO9GemPVHbHYjZck9+w=,tag:j1GpvC7981wKxPIZaLKyzA==,type:str]
|
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaG1YSUF0UUFmV0QzbFA1
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZC9ZVlY2T0tXdy90b2hV
|
||||||
RnhlRVNWQ3h6R0xMcmIvM0EzNGJleUxSTTJzCi81QWpMdXJxQWYreE9DUnJGeHF6
|
dDUxUjNyMjllQStaa0tKRy9YVkNIdFJyWTI4CitYNnhxN3JHQ3lsWXp2Tmgwek9n
|
||||||
SUI1d2wxY016dHhxSHdsL3NXUUt2SncKLS0tIENjMkJERFlMMEU0TVFFM1lubUtF
|
Qzk1RUExZk5WcnlvUWptcmFQTFJNbWMKLS0tIFBtSkJOZUovTUxYeFZ3cnJ2Ukw0
|
||||||
OTlaSlRPTUt5d3NjNVF4NFJaMkJsUUEKvjnPwfODT5D8pWp8lrksyfvpC822xZ0h
|
MkVQY3h2OGhGaGNnYkVJUU1kK3F3VWMKs9B74KovGxx8KL5q/lGA/imVRM/i3mo/
|
||||||
GV4pwteQG/iIRDa71ScR8yolFaI6gZb8BMu93fdd130OHw1ySMGr0A==
|
a6Rbxufscp3WWGMbo70w8tWuRsAnIpUGh3EvWCekZ9nOzeMiVA8I2Q==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
|
- recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkeHkyektGNEpEdzhySERs
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0dXJzYndvSC92aElvTVpz
|
||||||
VW1PVzgvUjZWbG5sbG8zTllvMWVzV0w4M2lrCnJHd3lqYXRDNEhBa2pRUmJCTXg3
|
SUtTOWFzcUJxOHVrTk5scm5tcGkzRmEvK1hVClNVbmp3ZjBRTW5ZNXVNNGh3dSti
|
||||||
Z3RTaXhuczV6QjV3MkV0RVFURlgxOHcKLS0tIHFKajZlMk84eGk3d05xVTR2ZzN0
|
RzdCcTFlVlBld1kwNnR6dVhtcllVMFkKLS0tIG1YK2dLcWdVU3dLUFFlOUtzb3Ex
|
||||||
ajRQeW16ZzJZb1NhSVBwZlVtRGs0KzQKJfdPbIftdtckf5m4Tom+eiVhh888Y3Am
|
Tk5Zd0h3OHRpQzZjazJKUStPUVdERzQKGnoKYKq7pPJUrcAWJ4/tm8mSxuthjssz
|
||||||
wDG0eui4p+fueF3Eirpwlei+KxMFlaXdpIBrnKL+Ep9lQtuF/Jh7Dg==
|
7IsjH4t6VCyug2c7XnLJpcE64yPD+GrXHYixP0r2qj80WMjpv7N7qA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
|
- recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlZXJjNW54V1MwR1k3V3By
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLbGQ3MkVCUldqa3dYRTg0
|
||||||
bUdIRFdBclJyVVdMVE1ucHNtcnBkTWpsNlUwCnJMUU8vd3Q5aHc4RU5NRzZpQnZQ
|
NjVoUDdIc0RvSU02R0o0ZVk4KzVQMkZmeXpjClJaUUU3WTJVQmJkRzV4UTc3bXFI
|
||||||
dTBIS2U5R09LQkFJZ1VkNHdtNnJaQ3cKLS0tIGcrKzNkS25BWGYzZUgzQTVUUzJo
|
dmJsV0VhNmdvdVNaaUFTNWcwd1l3eGsKLS0tIG1Gc3FlNVduaXUybUFnSGF4T3lu
|
||||||
a0d1Sm54enlZMEV3dXQzb1o5WlRwZlkKvLmWcazC7TYVJsozaxTnWv5xMLOuXYHf
|
QzhtM3V3VGFzdk9UenV6akxGNDh5d3cKdIKNPvM0GRJamiS4AXRNU+TbuZUnM6K7
|
||||||
pU2KWjd6RRzoDKW/uizeTmXQzkYRWrrWW4PCXmOpK9XZt4iTJfuTqQ==
|
FtC1dmHlyU/tXlFHv6TNlMZQtDgIVnE72Jvk48maq3oKiJAXWk11fg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
|
- recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsQ2hIdGc3eWorLzByV1RO
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoOHlRcnRwWUYwUGRSVW9s
|
||||||
VVlzd0ZMUWVPMU4xWThsOUFtRkp6b1ZjQndZCkJJT2ZoZWxad0xzN2R3MnlDZlUw
|
cmdDZjN1RGFRVWtlODBudGpaemd3UDBZcnhRCksyWlk3VW91a3pnOGNQQVppM09z
|
||||||
NzRyUVllZ092RUhLUzZ6cHY4b3c0ZXcKLS0tIC9JN211V01TWG5VcjVOQ2Nuc3Na
|
Wmd3c09LK25OVGpJYWxvcm9XME03RG8KLS0tIEZkdERHZjhFWXkzZWNsM01nQmRs
|
||||||
c1NOaTg3ZVpRc0Q2TWV0djZqRFp1aE0KHDr4n+nbkRUKKdVgOm9+KU00hvLxR9Vs
|
bWFTMlhCL2IrZjlEOUFydmE4cHBzSmMKhIk8TZtRsIFKzopZCyp27SWYeHmf6jKn
|
||||||
2HwTIJEftEWZotf+0cuuEM6SBOpvitUeGC+ZsAoLg8upyFi0ewxqsg==
|
VoIXQ6/VRRQjCYBsseZE5N+ycnr4ZC/RpXJ577G4TfGMCcixX67AfA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
|
- recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5aWFUSmJQamdEOVcvRXlY
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTG9LKzVvUjZEZ1lkMVJN
|
||||||
R2ZMYS9qM0Zna09ScjVCVWNHaUJTNVRuL1RrCmJyT1BzMEJkZkRLcHJGT3JmMXRx
|
eldHSkRXQ241bnZmbHBmSXFNMU1seGcyaVNRCjNPaS9ITEJtdGRwOENDRytEMFk1
|
||||||
azFWSHlBUStyV0tiNjllQm1nQVMxSTQKLS0tIFFYQlZOV3poTk9ZSThsVzBZVDdI
|
L3cvVnRsa2lYUk1hOWZCdDNqT3F3TU0KLS0tIFQ3cU5YNEszQm03ZXFxWkJ2VVVW
|
||||||
MWZ2TDZXR2IrQXV1a3BlQ3FoUGkwSHMKc5Br5nIbPTX9DjT/qJA14R6JfGbks0s7
|
WTR2RU9GUVdsZHdleW1Gd2lyRENzSm8KznMUQ6Ah8O03AzZcCXgUIjjrV1cdkAnq
|
||||||
lIZUvIflvKYYPRcpReijwmfPMAJFK9S0fRucDDW90APO1gYh7bJ4PA==
|
Pbr2BwdLzJvlF5lzmymIZEt35euv/HzhJGWDLWGpYJmYj/N8qZgBuA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
|
- recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhWUprMUlDaVdCMXVIVnIx
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxSDNMRlNaMXB2ZXBPTlNu
|
||||||
Qk9WMWlWeDNRd0dQVWNUdjR0VC9vUXlBbVRRCldBZWtOcEdua0oyOG8vaGg2SVJK
|
eG5BWE5xRTNnVUFtN2psUFVHejZVbFVCQTBFCkRXQitoL0VJaXZmMlI3Q0JHVWk1
|
||||||
VWdJbzl3SHZDTmhTTVRwc09Jd2t0UFkKLS0tIFlhcUhyeEcwNDV3elE2K1VWWjlJ
|
Zk1wR0loMVZLbytDdTE2Ky94eGljS0EKLS0tIHFxVGYrZlVVS3FsWENUdzRaVzVY
|
||||||
VHVyR1ZxUVFFNHRLU0FBQjI0WU9taU0KhBXUKdgr/gvMtIxJshXRmSyV3zua9Po4
|
Q0x4bDFBTzV2L0E3UXQxMUdubVJZRTgKcPQZ9zHQAFwP/Odnh5INleUsHSN06U+x
|
||||||
ucj3AsLEsicoUm0qypvbbxLaOgk3VVZ5ZVQzTGVbH7beDiIbCxCoHg==
|
X98535uapyJR/Wswxj6ukdciMOou8cLfOInLwJgWOf6mZklEhecVXA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age15mxdhlvk7zxtqlw06cu29zdzk9jxjfgvx9s335wxyyk5r7wr9pvqv9894t
|
- recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwcnFnMWVhamFiYmlraFpp
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTaE1mUUlyVUxKQmhPMnlT
|
||||||
eXcyS3ZQRjk0T3gzZHhuaUNDeE5PeW54aDE0Ci9yaFFKT0FxNUpSUXNIazNCQWZC
|
eS81cE5TeE1WWFVIRkdWT3c0ckhNMnFYZGxrCnp4My9nK20zcGVxUFZ0cnVVTDBS
|
||||||
VStpc0NZWlZLM2drUDUrU0hvZXZURjQKLS0tIGJMKzdpSXdJaTA2RkdRbndMWVVy
|
QWtIQmVnM1lRV1ZtVXNGQ0dGdXNyOWsKLS0tIGIwM0JMM0JlZjBNaUQycEdudGlU
|
||||||
bTVGSlFGczFpUHRoZ0Fnbkk5dTV1QzgKSuLf3KdRBsTPDDcqd2+rGU3y3lrCjEKO
|
bzJvaUg2VkFrazBoWmlIY2hKeUdhTjQKbgW+ysm3TWBKfVoKAeqvaPio29SyzjJP
|
||||||
eIMjTcvJO4GhmDIwNfvI/j2+2qPLMEkyfR6eTXXCB4YDibaUndN/9Q==
|
61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age129rxje3pr8w5ulgszgmt98kt4kr06kdwhsg9js78sjte878ngf5qealch2
|
lastmodified: "2026-02-14T00:08:39Z"
|
||||||
lastmodified: "2026-08-30T23:52:17Z"
|
mac: ENC[AES256_GCM,data:lp9ZeDxt5gkOkDmYk+F0VQrVhkR0tQiQlYXbygoA8Dcq+gV0IIKKLwRqr5CVfgfRlo3239IwmKLsGaS6zYC1xX4toZ8oqw3Ic2UvP2CiWt6M7HTrlL+3Y2+PKOUvGl7RAqQxQAw7QaoxB4esqdIiWnMDueVHk5BTKrkay+afhno=,iv:NAMaZ9SMBAtROTBSQtU0RJDB60MAuE82AFoPtDqVHVM=,tag:RGBUTQC1pM+LcBweSJbc6w==,type:str]
|
||||||
mac: ENC[AES256_GCM,data:SJJtGZ842iStZ2RFIeEGLhHnrwOp6f6mDS5T80ldxmS2aD/o+3k6TlGKHuUM302+Gflksb7dwSdj0VUFhV6HIalYUO9exo2b37AEwACDt8HKs5QF1ruJ8/vz5vW9EpOvFH2wpGKSbczpc9RDsn8AVUo26G06SubUDWLk3fjCRl8=,iv:9DrnXEsgwC9ZSJJ6f5AZN9fjzeRGXqA5ZpBB0SQhiLo=,tag:MOpn7wbn845NwKkYTXRzYg==,type:str]
|
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.3
|
version: 3.11.0
|
||||||
|
|||||||
@@ -2,70 +2,70 @@ namedotcom_api__key: fbf0bc2133da020b64bbe9c884f616afe59dfdf7
|
|||||||
test: test
|
test: test
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
|
||||||
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUTzdydzQraXExRzJueUtn
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaU0s5VEszVDU4UlE2MDRi
|
||||||
dDZGdXJoR090cjRUZXlRMk5kaDlUOU1lWUU0Clh1aDBDYkxZMTRBakJsNFJ1K2VT
|
eXBGNXU1Si9TZng4U1lrSjMvajQ2WmhIQkgwCitjM2owU0kwTXlGNy90ZHM3TEhY
|
||||||
L1RLNHNaNDAxSW1xR01nTWZsRm01cFUKLS0tIEVuVUFzZmR6SmVrSytoaFl5eTBW
|
ZmlnSUtZcXFCUkdCNmxsL0lDWHIwQXMKLS0tIEtaWGVCbWJKOHl0SW5EUWVqRWgz
|
||||||
VE50c0dCRGVuNS9MbmptUTVYSkFLbTgKh4ZsKbDK3TcIYqoeWEB87W7sJhKGnmnJ
|
bUI2bFdONHBIMTA4Rks4dytIK0NSZmsK6gzcg+iYzt01tnptnuSGXHqBt+T9o9hP
|
||||||
ffIASIUv8YpJAoonspPMl0e2yjmRb1HpxM53JTOwbM5rRzia89VRow==
|
0gqLXgsfB+4OxRoMJVMEyecz9SX5+j6sWNQoRVQY1CGJoIucrpFrpg==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
|
- recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWM2FPdFRvUTU2cU1Vd0pP
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmTlN4YlBnTS93ZTh2STFr
|
||||||
SXNpZkhyVUkrM1htK0dpRGxvb1FKUXBWTUVnClNPNGtYclJDNURieEpIS2pIYzBt
|
Nng0YTNmeEw2N0ZXV0N0VVJaQjh4bldNS2xjCnYyMWxOb2hiR0Vwb1FXNmh6eitE
|
||||||
YVNvMmdnTXViVHNrNGNHRmpndlNBQ3cKLS0tIHJxZWp2OFEyUS9aRVhLVk5XMzlP
|
N1BMWFpXNElyNkJQNGJ6NUFzT3VOOVEKLS0tIG5MUXgzMEpMWGVGVnBubmRVM0hr
|
||||||
OS83eXdZWnBhNzhSeU5UWEMwKzJBc2MKRRq9CHKpP91fZNMDGEVmZFss5s9D3LIs
|
QjdQUkoyWHE2M05nSkZXNWpBTXdnN2cKEB3JndFHK/bFMx7zf3y/wfEALJIDO85u
|
||||||
r8BgdSqg5MACnFSCTa6l6oYXq8JnMeg01K46vyauSb6jDMOJ2yGVZQ==
|
RCKs6jIAztc3ElNDaKsIYRoF1VmrQSOvpk5ZJ1NytFcetNXvOR1KXw==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
|
- recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMcEF1NWNrU2pTcHlPQVhG
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6dDVCcHlKT1hVYUh5bXVk
|
||||||
dnZzbUZxVG0rVXBhMCtqSElWaTBGb2txalcwCllITmlKdnhrYnFWTU4vTExOTldW
|
cGtZWExJWlQxOVNDWkwrWU9hTi9iT2RLVW5RCjEveHczRDVsWkIyRWIvMTEzRyt6
|
||||||
Z0Y4c25reUZNLzc0dzY3aVAwejNiajQKLS0tIFgzOXd4T3pxZ0JVZDJOQzA1ekJz
|
ZWkzUDhqMVZjT1VKM0tvWjlEdy9DZGsKLS0tIDB0T1gyaTZ6a1JIaGF3dVhEcmdZ
|
||||||
eE5zNXRwYjQ1R1NDOHA3SWhtVHVJWG8KY6XA08Ow+bhc5k+LmumzCqVWZ5G70Spj
|
Yzl6QnAyU3l0QkhJQVpTN1ovY1hEUXMKiEPWh4isOmF2MdU6ENPNmwQgAOV7PleP
|
||||||
+I5PrnlLg+9IPUm6ht8uE/+GdaOqjjgOHChTb8zTD7Cxv8Ymm68ydg==
|
88PLtUx2K6VKjWPIHknIZ5esoXPVjJXeawDAdSj4gz91A1DrcrYXWA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
|
- recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFRkM2VExXREptVW1BQlZG
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwdXcwejJSejkwT3BuSURo
|
||||||
ZW92ekZRZ3lKdmEyMnc0dFA1QXp1SFdpcUVBCi9qbzNFRUFoTmxYQnFPNXdibm1n
|
MEluK3plUVdmVG8wcmw3SkI2dThBd1FOZDJzCmg2cHRZMEZIWENiTWdvdWtveTY2
|
||||||
OVAvNUhrWm83aGhWUXVtV050VHlVT2MKLS0tIEZPRDBwd05XL0hQcGE0WkMweHFh
|
TlN3MkhPT0N4enN3RlBJbWNUK1N0QXMKLS0tIEFOT2J6VlpLWmduK2pWalIvOWNo
|
||||||
Z3g0T1pZWW4yYXlPVVdQMDBJU1ozU0EKhV/d5gYZuBo/xmVB3Ce6CVG45GHeiJZQ
|
NFhiM1lWcExhcXBrZm8rMzc5WXJoeDAKSXHnzBymsLhXaxHipZig+xfpBjYaADu/
|
||||||
Z8HfKMcBD8DoWjodruuZzGotwotDLXzFLL+NW4BExh4PF+Enqr1dUQ==
|
AqOXpfLbZQD15oIMg8+vNR2OOzqRRSq8oY2yI1rhkjZtlTxGiuzANw==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
|
- recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIS3A4QiszRmlVMzdhK0E1
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUMUhGMURUdzh4MFgzNDlC
|
||||||
dkdCVThrYlpRbG9OVUJySDcrTmFlVXRWZW5ZCk14Rlp4VW1JdlhmZk9POUc4WjhD
|
Nzh0UW5WNUh1MDhEQnBod2E5OEVqMmhiTVVrCitmbk1uWkY5Q09COGZRZ2xhNXBl
|
||||||
SXZwdlJKRjFwS2ttRis3WEFmT3dTZVkKLS0tIDZTOHd0RzNmekE2ODRMcy9sV0Zo
|
bnlVUmxDb2FQT0xPN0F3SkgyTVRpWjgKLS0tIGdWN1ptVTlhNUZtTU11VDFMSFlM
|
||||||
QzVTOTU5bGVCR0N4YXJEcVZWL2N4S0UKf/JY8ue8QiBC5BPxO5hArxgES7Us3N4O
|
djVyTzMyRHA1QnlvdEtaNE5URXVDS00KH+9tHTwQqI7uLubVWfU1IZ19WWDPA9Br
|
||||||
XLO6+/KrxwemgE8Eubf3J8NUe7cV8sVoxDSrx79LbQkgIq/AdWjfVA==
|
HrnX4nn0AITQCWUkAqWVyGVP5pk5YmlmazLE6xyBz+i2ETT11DHVMw==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
|
- recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNeFY0SDlxR0Y1dW5UUHI0
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2ZGJ4bWNsR0tOa0g5Ym1M
|
||||||
UlByQmlIWUlyWEpwb1ptL0svTllnTkVXbWdzCjhIZ05PMkJpWHZzWnpJMUxRVUdV
|
UTJlRS9XRnNaOVBOd3dkS0tmaVJlZU5yd2xVClR0WU1nTnZud0RzeHZERUFRYzRE
|
||||||
VkFKTjU4VXFCbTh1cnF3cjlwSTY1dTgKLS0tICtGbnZGSzkzc1RmdTMrd3Z2NHdG
|
bmp1OXorQ09LRzZyUEs1SXlvenZIOVkKLS0tIHBvakxTSTkxZXdBQmpVRWF5YUtF
|
||||||
MGUxR25naDFJSjdqNUx0QjRmdHh1K3cKGcE1BgLs0c0UtrPcxk/L8WTo6Bd4VMsh
|
QnBNcU1ibytoNDZCU1lldzczV0xjUzgK6gIlN6PYv8+ZGhdMuOSVHIkzZ9sU5kvI
|
||||||
uklBQ6vpc6RWNJ32ROXKCekLFSpbsD4qMwfvb4mOG6nXfwPWytnVHA==
|
ZpB+JirAJzFpYEz2IyT21XKNq9phqyj9lzzinvJQQ7wxsI6ixaiBDQ==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age15mxdhlvk7zxtqlw06cu29zdzk9jxjfgvx9s335wxyyk5r7wr9pvqv9894t
|
- recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
|
||||||
- enc: |
|
enc: |
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoYWdqK2oyTEdZTGtKV2kr
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6NVU4dUR2Y3hXbWdrdXNN
|
||||||
cUlNNjZWUEU3MGlkTzFISGsvR2JrOXdtOHd3ClV2WEtaYVAwbHg4MlkwRjNnei9h
|
Rjh4VEE2M1NiTTZiWmpjVXQzSGxSS0l3a1I4Ci95ZUVhbTFtTHNLa3BvRnJRUjda
|
||||||
NmZ1N3lhUklxd2FSdGdyM3ZRSXRnZDAKLS0tIGhweFdoK1R2N2x1bmQvWXdYek9u
|
aVIyREZiL1phNU16OERZSDBvRGovVVUKLS0tIHpGdkh1L280TVp1MnE0L1Q1Z3FV
|
||||||
L05NZ0piWkdUTUIvdld6a1Y4WVRsRE0K3m8CLO2V2l3DJ7T/EXbqCdYDK/INqmUj
|
QnNTaHVsSVh2UmNRVzZ3a082ZjRRbmcKgjnhtWweNUAbmxpb+nN3iL9FOsaXCatu
|
||||||
Eu9wliqeIOF5Lg3IrmB3WkOafxVw8HAVB+htkwwvD8MYk9/XubbQvw==
|
NyS4pTov3WR9c7SLhDLlbqxeeqd7mBDKLhWiuqiW05J5NQ+g5lXf7g==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age129rxje3pr8w5ulgszgmt98kt4kr06kdwhsg9js78sjte878ngf5qealch2
|
|
||||||
encrypted_regex: ^(data|stringData)$
|
|
||||||
lastmodified: "2026-02-14T00:09:32Z"
|
lastmodified: "2026-02-14T00:09:32Z"
|
||||||
mac: ENC[AES256_GCM,data:nYWQYK5QOA0u3DYGTozSGFMYhx2uMqkAWoqhthgagRFRnKA/j852fVKqRFcwn+fPSQ4e8i4WpcvoM7FVwuFDC+ixNp7xtz16pnswiNS4N/mNEYXfajkon7wIoUYNtrHahUeYlAnID0vYSQFA3XKgV7ZDD9b4V8X5N+yMlVXex4c=,iv:IW7276v0nnmFBe9Z7HIn6Tl9vX4sDoqWdDfJ1uwKoAY=,tag:YC8OiTcoL+nYV4x8rkivbg==,type:str]
|
mac: ENC[AES256_GCM,data:nYWQYK5QOA0u3DYGTozSGFMYhx2uMqkAWoqhthgagRFRnKA/j852fVKqRFcwn+fPSQ4e8i4WpcvoM7FVwuFDC+ixNp7xtz16pnswiNS4N/mNEYXfajkon7wIoUYNtrHahUeYlAnID0vYSQFA3XKgV7ZDD9b4V8X5N+yMlVXex4c=,iv:IW7276v0nnmFBe9Z7HIn6Tl9vX4sDoqWdDfJ1uwKoAY=,tag:YC8OiTcoL+nYV4x8rkivbg==,type:str]
|
||||||
|
encrypted_regex: ^(data|stringData)$
|
||||||
version: 3.11.0
|
version: 3.11.0
|
||||||
|
|||||||
@@ -15,8 +15,7 @@
|
|||||||
inputs.sops-nix.homeManagerModules.sops
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
];
|
];
|
||||||
sops = {
|
sops = {
|
||||||
age.keyFile = "/home/doloro/.config/sops/age/keys.txt"; # must have no password!
|
age.keyFile = "/home/doloro/.config/sops/age/key.txt"; # must have no password!
|
||||||
# I HATE YOU
|
|
||||||
defaultSopsFile = ./content/secrets.yaml;
|
defaultSopsFile = ./content/secrets.yaml;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,17 +3,17 @@
|
|||||||
__findFile,
|
__findFile,
|
||||||
modules,
|
modules,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
# Basic caddy
|
# Basic caddy
|
||||||
modules.services.provides.caddy = {
|
modules.services.provides.caddy = {
|
||||||
nixos = {config, ...}: {
|
nixos =
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
services.caddy = {
|
services.caddy = {
|
||||||
enable = true;
|
enable = true;
|
||||||
email = "doloroo@proton.me";
|
email = "doloroo@proton.me";
|
||||||
enableReload = true;
|
enableReload = true;
|
||||||
globalConfig = ''
|
|
||||||
acme_ca https://acme-v02.api.letsencrypt.org/directory
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,14 +3,13 @@
|
|||||||
__findFile,
|
__findFile,
|
||||||
modules,
|
modules,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
# Basic traefik
|
# Basic traefik
|
||||||
modules.services.provides.ddns = {
|
modules.services.provides.ddns = {
|
||||||
nixos = {
|
nixos =
|
||||||
config,
|
{ config, pkgs, ... }:
|
||||||
pkgs,
|
let
|
||||||
...
|
|
||||||
}: let
|
|
||||||
ddnsImg = pkgs.dockerTools.pullImage {
|
ddnsImg = pkgs.dockerTools.pullImage {
|
||||||
imageName = "qmcgaw/ddns-updater";
|
imageName = "qmcgaw/ddns-updater";
|
||||||
imageDigest = "sha256:ee16ab4f6203bf9e5b0925d38a0b4ebf2d9f23771f933cfb2f5a2dbd5f9a2f88";
|
imageDigest = "sha256:ee16ab4f6203bf9e5b0925d38a0b4ebf2d9f23771f933cfb2f5a2dbd5f9a2f88";
|
||||||
@@ -19,7 +18,8 @@
|
|||||||
sha256 = "sha256-dMCHkvoFaORmGwbIM9io4Vc9fq+wBks25k2dmnW7naI=";
|
sha256 = "sha256-dMCHkvoFaORmGwbIM9io4Vc9fq+wBks25k2dmnW7naI=";
|
||||||
arch = "arm64";
|
arch = "arm64";
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
virtualisation.oci-containers.containers = {
|
virtualisation.oci-containers.containers = {
|
||||||
ddns = {
|
ddns = {
|
||||||
image = "qmcgaw/ddns-updater";
|
image = "qmcgaw/ddns-updater";
|
||||||
@@ -28,18 +28,10 @@
|
|||||||
"/data/ddns:/updater/data"
|
"/data/ddns:/updater/data"
|
||||||
"/etc/localtime:/etc/localtime:ro"
|
"/etc/localtime:/etc/localtime:ro"
|
||||||
];
|
];
|
||||||
ports = ["0.0.0.0:8125:8000"];
|
# ports = [ "0.0.0.0:8123:8123" ];
|
||||||
# networks = [ "meow" ];
|
# networks = [ "meow" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
services.caddy = pkgs.lib.mkIf config.services.caddy.enable {
|
|
||||||
virtualHosts."ddns.h.doloro.co.uk".extraConfig = ''
|
|
||||||
reverse_proxy :8125
|
|
||||||
basic_auth {
|
|
||||||
doloro $2a$14$FH.UkwC0PUsQ7IEV9XLAf.6/11KLsugCbrX/o6dPTx7NBlJWv3aiO
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
__findFile,
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# Basic traefik
|
|
||||||
modules.services.provides.docker-registry = {
|
|
||||||
nixos = {
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
registryImg = pkgs.dockerTools.pullImage {
|
|
||||||
imageName = "registry";
|
|
||||||
imageDigest = "sha256:85347ed2ecde64161c7a4788a4d7d3dcc9d6f86f7be95834022e3c6a423a945a";
|
|
||||||
finalImageName = "registry";
|
|
||||||
finalImageTag = "3";
|
|
||||||
sha256 = "sha256-rLG0q/MVVz52veqZuZs5W0Qke6FugXkx7fMe3QnE3gU";
|
|
||||||
arch = "arm64";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
virtualisation.oci-containers.containers = {
|
|
||||||
docker-registry = {
|
|
||||||
image = "registry";
|
|
||||||
imageFile = registryImg;
|
|
||||||
volumes = [
|
|
||||||
"/data/dockerRegistry:/var/lib/registry"
|
|
||||||
"/run/dbus:/run/dbus:ro"
|
|
||||||
"/etc/localtime:/etc/localtime:ro"
|
|
||||||
];
|
|
||||||
ports = ["0.0.0.0:5000:5000"];
|
|
||||||
# networks = [ "meow" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
networking.firewall = {
|
|
||||||
allowedTCPPorts = [
|
|
||||||
5000
|
|
||||||
];
|
|
||||||
allowedUDPPortRanges = [];
|
|
||||||
};
|
|
||||||
services.caddy = pkgs.lib.mkIf config.services.caddy.enable {
|
|
||||||
virtualHosts."https://reg.h.doloro.co.uk".extraConfig = ''
|
|
||||||
reverse_proxy :5000
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
{
|
|
||||||
den,
|
|
||||||
__findFile,
|
|
||||||
modules,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
modules.services.provides.rtmp-to-whip = {
|
|
||||||
nixos =
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
systemd.services.init-rtmp-to-whip-network = {
|
|
||||||
description = "Create rtmp-to-whip docker network";
|
|
||||||
after = [
|
|
||||||
"docker.service"
|
|
||||||
"docker.socket"
|
|
||||||
];
|
|
||||||
requires = [
|
|
||||||
"docker.service"
|
|
||||||
"docker.socket"
|
|
||||||
];
|
|
||||||
before = [
|
|
||||||
"docker-rtmp-to-whip.service"
|
|
||||||
"docker-rtmp-to-whip-frontend.service"
|
|
||||||
];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
};
|
|
||||||
script = ''
|
|
||||||
${pkgs.docker}/bin/docker network inspect rtmp-to-whip >/dev/null 2>&1 || \
|
|
||||||
${pkgs.docker}/bin/docker network create rtmp-to-whip
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.oci-containers.containers = {
|
|
||||||
rtmp-to-whip = {
|
|
||||||
image = "reg.h.doloro.co.uk/doloro/rtmp-to-whip:latest-aarch64";
|
|
||||||
ports = [
|
|
||||||
"0.0.0.0:1935:1935"
|
|
||||||
"0.0.0.0:6969:6969/udp"
|
|
||||||
"127.0.0.1:3001:3000"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
PUBLIC_DOMAIN = "stream.h.doloro.co.uk";
|
|
||||||
RTC_PORT = "6969";
|
|
||||||
SIGNUP_CODE = "mreowmreow-pawsatyou";
|
|
||||||
RUST_LOG = "info";
|
|
||||||
};
|
|
||||||
volumes = [
|
|
||||||
"/data/rtmp-to-whip/db:/db"
|
|
||||||
];
|
|
||||||
extraOptions = [ "--network=rtmp-to-whip" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
rtmp-to-whip-frontend = {
|
|
||||||
image = "reg.h.doloro.co.uk/doloro/rtmp-to-whip-frontend:latest-aarch64";
|
|
||||||
ports = [
|
|
||||||
"127.0.0.1:3002:3000"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
VITE_API_URL = "https://stream.h.doloro.co.uk/api";
|
|
||||||
};
|
|
||||||
extraOptions = [ "--network=rtmp-to-whip" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
rtmp-to-whip-watchtower = {
|
|
||||||
image = "ghcr.io/nicholas-fedor/watchtower:latest";
|
|
||||||
volumes = [
|
|
||||||
"/var/run/docker.sock:/var/run/docker.sock"
|
|
||||||
];
|
|
||||||
environment = {
|
|
||||||
WATCHTOWER_CLEANUP = "true";
|
|
||||||
WATCHTOWER_POLL_INTERVAL = "300";
|
|
||||||
};
|
|
||||||
cmd = [
|
|
||||||
"rtmp-to-whip"
|
|
||||||
"rtmp-to-whip-frontend"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
allowedTCPPorts = [ 1935 ];
|
|
||||||
allowedUDPPorts = [ 6969 ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.caddy = pkgs.lib.mkIf config.services.caddy.enable {
|
|
||||||
virtualHosts."stream.h.doloro.co.uk".extraConfig = ''
|
|
||||||
handle /api* {
|
|
||||||
reverse_proxy :3001
|
|
||||||
}
|
|
||||||
handle {
|
|
||||||
reverse_proxy :3002
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
ssh = {
|
ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false;
|
enableDefaultConfig = false;
|
||||||
settings = {
|
matchBlocks = {
|
||||||
"*" = {
|
"*" = {
|
||||||
AddKeysToAgent = "yes";
|
addKeysToAgent = "yes";
|
||||||
IdentityFile = [
|
identityFile = [
|
||||||
"~/.ssh/id_ed25519"
|
"~/.ssh/id_ed25519"
|
||||||
"~/.ssh/id_gitea_scug"
|
"~/.ssh/id_gitea_scug"
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
modules,
|
modules,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: {
|
}:
|
||||||
|
{
|
||||||
flake-file.inputs = {
|
flake-file.inputs = {
|
||||||
stylix = {
|
stylix = {
|
||||||
url = "github:nix-community/stylix";
|
url = "github:nix-community/stylix";
|
||||||
@@ -11,9 +12,11 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
modules.stylix = {
|
modules.stylix = {
|
||||||
homeManager = {pkgs, ...}: {
|
homeManager =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
imports = [ inputs.stylix.homeModules.stylix ];
|
imports = [ inputs.stylix.homeModules.stylix ];
|
||||||
# gtk.gtk4.theme = null;
|
gtk.gtk4.theme = null;
|
||||||
stylix = {
|
stylix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autoEnable = false;
|
autoEnable = false;
|
||||||
@@ -29,7 +32,9 @@
|
|||||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nixos = {pkgs, ...}: {
|
nixos =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
imports = [ inputs.stylix.nixosModules.stylix ];
|
imports = [ inputs.stylix.nixosModules.stylix ];
|
||||||
stylix.enable = false;
|
stylix.enable = false;
|
||||||
stylix.autoEnable = false;
|
stylix.autoEnable = false;
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
flake-file.inputs = {
|
flake-file.inputs = {
|
||||||
x1e-kernel.url = "git+ssh://git@git.scug.io:/nikkuss/x1e-staging.git?ref=staging";
|
x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
|
||||||
x1e-kernel.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
modules.surface-patches = {
|
modules.surface-patches = {
|
||||||
nixos =
|
nixos =
|
||||||
@@ -17,58 +16,9 @@
|
|||||||
x1e-kernel.nixosModules.default
|
x1e-kernel.nixosModules.default
|
||||||
];
|
];
|
||||||
|
|
||||||
# x1e.model = "15"; # "13" (default) or "15" — selects the correct DTB
|
x1e.model = "15"; # "13" (default) or "15" — selects the correct DTB
|
||||||
# x1e.cpuParking = false; # loads cpu_parking at boot
|
x1e.cpuParking = false; # loads cpu_parking at boot
|
||||||
# x1e.ecReboot = true; # loads ec_reboot at boot, exposes /sys/kernel/ec_reboot/reboot
|
x1e.ecReboot = true; # loads ec_reboot at boot, exposes /sys/kernel/ec_reboot/reboot
|
||||||
x1e = {
|
|
||||||
model = "15";
|
|
||||||
cpuParking = false;
|
|
||||||
ecReboot = true;
|
|
||||||
el2 = {
|
|
||||||
debugTools = false;
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
iso = {
|
|
||||||
enable = true;
|
|
||||||
modules = [ ];
|
|
||||||
};
|
|
||||||
msm = {
|
|
||||||
extraPatches = [ ];
|
|
||||||
};
|
|
||||||
pmSdamTrace = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
psr = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
ramoops = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
spiHid = {
|
|
||||||
# drivers = [ "legacy" ];
|
|
||||||
legacy = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
v4 = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ssamPmNotifier = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
ssamRequestTimeout = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
touchscreen = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
systemIdleState = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
video = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Prevent reboot hang - qcom_smd_qrtr workers stuck in D-state
|
# Prevent reboot hang - qcom_smd_qrtr workers stuck in D-state
|
||||||
systemd.settings.Manager.DefaultTimeoutStopSec = "15s";
|
systemd.settings.Manager.DefaultTimeoutStopSec = "15s";
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{ modules, inputs, ... }:
|
|
||||||
{
|
|
||||||
flake-file.inputs = {
|
|
||||||
iptsd.url = "git+ssh://git@git.scug.io:/nikkuss/iptsd-rs.git?ref=main";
|
|
||||||
iptsd.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
modules.surface-touchpad = {
|
|
||||||
nixos = {
|
|
||||||
imports = [ inputs.iptsd.nixosModules.default ];
|
|
||||||
config.services.iptsd-rs.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
+3
-10
@@ -2,11 +2,7 @@
|
|||||||
{
|
{
|
||||||
modules.tmux = {
|
modules.tmux = {
|
||||||
homeManager =
|
homeManager =
|
||||||
{
|
{ home, pkgs, ... }:
|
||||||
home,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
{
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -15,13 +11,10 @@
|
|||||||
minimal-tmux-status
|
minimal-tmux-status
|
||||||
];
|
];
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
set-option -g default-terminal "tmux-256color"
|
set-option -g default-terminal "xterm-256color"
|
||||||
set -as terminal-features ",xterm-256color:RGB"
|
set -a terminal-features "xterm-256color:RGB"
|
||||||
set -g status-bg black
|
set -g status-bg black
|
||||||
set -g status-fg white
|
set -g status-fg white
|
||||||
set -g mouse on
|
|
||||||
set -g extended-keys on
|
|
||||||
set -g allow-passthrough on
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
default_session = {
|
default_session = {
|
||||||
command = "${pkgs.tuigreet}/bin/tuigreet --sessions ${config.services.displayManager.sessionData.desktops}/share/xsessions:${config.services.displayManager.sessionData.desktops}/share/wayland-sessions --remember --remember-user-session --greeting 'meow meow meow' --time";
|
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --sessions ${config.services.xserver.displayManager.sessionData.desktops}/share/xsessions:${config.services.xserver.displayManager.sessionData.desktops}/share/wayland-sessions --remember --remember-user-session --greeting 'meow meow meow' --time";
|
||||||
user = "greeter";
|
user = "greeter";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{modules, ...}: {
|
|
||||||
modules.unity = {
|
|
||||||
homeManager = {pkgs, ...}: {
|
|
||||||
home.packages = [pkgs.unityhub pkgs.alcom pkgs.unityhub.fhsEnv];
|
|
||||||
home.file."unityExec" = {
|
|
||||||
source = "${pkgs.unityhub}/bin/unityhub";
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -7,9 +7,7 @@
|
|||||||
users.users.${user.userName} = {
|
users.users.${user.userName} = {
|
||||||
extraGroups = [
|
extraGroups = [
|
||||||
"wheel"
|
"wheel"
|
||||||
"libvirtd"
|
|
||||||
"networkmanager"
|
"networkmanager"
|
||||||
"dialout"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
{ den, modules, ... }:
|
|
||||||
{
|
|
||||||
modules.wivrn = {
|
|
||||||
homeManager =
|
|
||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
# nixpkgs builds wivrn with NVENC off (WIVRN_USE_NVENC follows cudaSupport);
|
|
||||||
# without it "nvenc" in config.json fails with "Failed to find a suitable video encoder"
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
wivrn = prev.wivrn.override { cudaSupport = true; };
|
|
||||||
})
|
|
||||||
];
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
wivrn
|
|
||||||
wayvr
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
nixos =
|
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
# nixpkgs only enables the NVENC encoder (WIVRN_USE_NVENC) when cudaSupport is set;
|
|
||||||
# without it "nvenc" in config.json fails with "Failed to find a suitable video encoder"
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
wivrn = prev.wivrn.override { cudaSupport = true; };
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
services.wivrn = {
|
|
||||||
enable = true;
|
|
||||||
openFirewall = true;
|
|
||||||
autoStart = true;
|
|
||||||
highPriority = true;
|
|
||||||
|
|
||||||
# Low-latency encoder config
|
|
||||||
extraServerFlags = [ ];
|
|
||||||
|
|
||||||
monadoEnvironment = {
|
|
||||||
# Monado OpenXR runtime env vars
|
|
||||||
};
|
|
||||||
|
|
||||||
steam = {
|
|
||||||
enable = true;
|
|
||||||
importOXRRuntimes = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Optimal config for low latency:
|
|
||||||
# - Vulkan encoder (newer kernels) or vaapi (AMD/Intel)
|
|
||||||
# - H265 codec (3ms overhead, better quality than H264)
|
|
||||||
# - 90Hz refresh rate (balance quality/battery)
|
|
||||||
# - 140% render resolution with quality supersampling
|
|
||||||
# - Up to 200Mbit/s bitrate on good networks
|
|
||||||
config.enable = true;
|
|
||||||
config.json = {
|
|
||||||
encoder = {
|
|
||||||
encoder = "nvenc";
|
|
||||||
codec = "h265";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable mDNS discovery
|
|
||||||
"publish-service" = "avahi";
|
|
||||||
|
|
||||||
# High priority for async reprojection
|
|
||||||
highPriority = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Include monado-vulkan-layers for VR rendering
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
monado-vulkan-layers
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
modules,
|
|
||||||
den,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
flake-file.inputs = {
|
|
||||||
nixos-wsl.url = "github:nix-community/NixOS-WSL";
|
|
||||||
};
|
|
||||||
modules.wsl = {
|
|
||||||
nixos = {
|
|
||||||
imports = [inputs.nixos-wsl.nixosModules.default];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -42,9 +42,11 @@
|
|||||||
];
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
wayland.windowManager.hyprland.settings.bind = lib.mkIf settings.default [
|
wayland.windowManager.hyprland.settings = lib.mkIf settings.default {
|
||||||
{ _args = [ "SUPER + E" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("zen")'') ]; }
|
bind = [
|
||||||
|
"$mainMod, E, exec, zen"
|
||||||
];
|
];
|
||||||
|
};
|
||||||
home.packages = [
|
home.packages = [
|
||||||
(pkgs.wrapFirefox
|
(pkgs.wrapFirefox
|
||||||
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.zen-browser-unwrapped
|
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.zen-browser-unwrapped
|
||||||
|
|||||||
Generated
+340
-915
File diff suppressed because it is too large
Load Diff
@@ -3,17 +3,14 @@
|
|||||||
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config);
|
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config);
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
barbar.url = "git+https://git.scug.io/doloro/barbar?ref=master";
|
|
||||||
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
|
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
|
||||||
direnv-instant.url = "github:Mic92/direnv-instant";
|
|
||||||
disko.url = "github:nix-community/disko";
|
disko.url = "github:nix-community/disko";
|
||||||
flake-file.url = "github:denful/flake-file";
|
flake-file.url = "github:vic/flake-file";
|
||||||
flake-parts = {
|
flake-parts = {
|
||||||
url = "github:hercules-ci/flake-parts";
|
url = "github:hercules-ci/flake-parts";
|
||||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
font-patcher.url = "github:Doloro1978/nix-nerd-fonts-patcher";
|
font-patcher.url = "github:Doloro1978/nix-nerd-fonts-patcher";
|
||||||
grimoire.url = "github:Slush97/grimoire";
|
|
||||||
heliumFlake = {
|
heliumFlake = {
|
||||||
url = "github:vikingnope/helium-browser-nix-flake";
|
url = "github:vikingnope/helium-browser-nix-flake";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -23,14 +20,9 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
hyprland.url = "github:hyprwm/Hyprland";
|
hyprland.url = "github:hyprwm/Hyprland";
|
||||||
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
|
import-tree.url = "github:vic/import-tree";
|
||||||
import-tree.url = "github:denful/import-tree";
|
|
||||||
iptsd = {
|
|
||||||
url = "git+ssh://git@git.scug.io:/nikkuss/iptsd-rs.git?ref=main";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
nik-pkgs = {
|
nik-pkgs = {
|
||||||
url = "git+https://git.scug.io/nikkuss/pkgs.git?ref=main";
|
url = "git+https://git.scug.io/nikkuss/pkgs.git";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
niri-flake = {
|
niri-flake = {
|
||||||
@@ -38,15 +30,9 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
|
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
|
||||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
|
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
|
||||||
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main";
|
|
||||||
nixos-wsl.url = "github:nix-community/NixOS-WSL";
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
nixpkgs-master.url = "github:NixOS/nixpkgs/master";
|
|
||||||
nixvim.url = "github:nix-community/nixvim";
|
nixvim.url = "github:nix-community/nixvim";
|
||||||
omp-nix.url = "git+https://git.molez.org/mandlm/omp-nix?ref=main";
|
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
|
||||||
raspberry-pi-nix.url = "github:cmyk/raspberry-pi-nix";
|
|
||||||
sops-nix = {
|
sops-nix = {
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -56,10 +42,7 @@
|
|||||||
url = "github:nix-community/stylix";
|
url = "github:nix-community/stylix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
x1e-kernel = {
|
x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
|
||||||
url = "git+ssh://git@git.scug.io:/nikkuss/x1e-staging.git?ref=staging";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
zen-browser = {
|
zen-browser = {
|
||||||
url = "github:youwen5/zen-browser-flake";
|
url = "github:youwen5/zen-browser-flake";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|||||||
Reference in New Issue
Block a user