Compare commits

..

2 Commits

Author SHA1 Message Date
doloro d10b195c7e meow 2026-04-30 11:43:18 +01:00
doloro 119148c764 swapped out flake 2026-04-30 11:35:18 +01:00
51 changed files with 849 additions and 2617 deletions
-111
View File
@@ -1,111 +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
```
## 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";
};
};
}
+23 -88
View File
@@ -11,22 +11,17 @@
<den/primary-user> <den/primary-user>
den.aspects.doloro-shared den.aspects.doloro-shared
modules.sops modules.sops
modules.flatpaks
modules.gamemode
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/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;
@@ -36,56 +31,38 @@
modules.quickshell modules.quickshell
modules.nix-ld modules.nix-ld
modules.spotify modules.spotify
# modules.easyeffects modules.easyeffects
# modules.lavd modules.lavd
modules.ai modules.ai
modules.pi-coding <modules/ai/ollama-cuda>
# modules.omp
modules.podman
# <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"
];
}; };
# 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
exec-once = hyprctl dispatch workspace 2 # shit solution to get quickshell on the right monitor ];
workspace = name:2, monitor:DP-2 workspace = [
input { "name:2, monitor:DP-3"
kb_layout = "gb" ];
follow_mouse = 2 input = {
sensitivity = -0.5 kb_layout = "gb";
} follow_mouse = 2;
''; sensitivity = -0.5;
};
}; };
home.packages = with pkgs; [ home.packages = with pkgs; [
equibop equibop
@@ -93,53 +70,11 @@
obsidian obsidian
# pear-desktop # pear-desktop
prismlauncher prismlauncher
# deadlock-mod-manager deadlock-mod-manager
inputs.nik-pkgs.packages.x86_64-linux.grimoire gamescope
# gamescope
android-studio android-studio
blender
qbittorrent
mpv
krita
# (tetrio-desktop.override { withTetrioPlus = true; })
# bottles
# pi-coding-agent
# 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;
}; };
}; };
+3 -50
View File
@@ -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 @@ hardware.graphics = {
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 @@ hardware.graphics = {
# 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 @@ hardware.graphics = {
# 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;
};
}; };
}; };
} }
+17 -14
View File
@@ -21,7 +21,6 @@
modules.stylix modules.stylix
modules.quickshell modules.quickshell
modules.lavd modules.lavd
modules.omp
# modules.podman # modules.podman
# modules.openvivo # modules.openvivo
]; ];
@@ -37,19 +36,23 @@
homeManager = homeManager =
{ pkgs, ... }: { pkgs, ... }:
{ {
xdg.configFile."hypr/hyprland-local.lua" = { wayland.windowManager.hyprland.settings = {
text = '' # monitor = [
decoration { # "eDP-1, 2880x1800@120, 0x0, 2"
blur { # ];
enabled = false input = {
} kb_layout = "gb";
} follow_mouse = 2;
input { sensitivity = 0;
kb_layout = "gb" };
follow_mouse = 2 decoration = {
sensitivity = 0 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
+3 -3
View File
@@ -171,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 = [
+8 -8
View File
@@ -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,12 +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 =
{ lib, ... }:
{
}; };
}; };
} }
-34
View File
@@ -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 = {...}: {
};
};
}
-22
View File
@@ -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";
};
};
}
+1 -45
View File
@@ -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 -17
View File
@@ -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.";
}; };
} }
-1
View File
@@ -6,6 +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";
}; };
} }
+2 -57
View File
@@ -11,64 +11,9 @@
}; };
}; };
homeManager = homeManager =
{ pkgs, config, ... }: { pkgs, ... }:
{ {
home.packages = [ home.packages = [ pkgs.opencode ];
pkgs.claude-code
];
sops = {
secrets.scug-io-ai-key = {
# sopsFile = ./secrets.yaml;
# Decrypted file path (available at runtime, not eval time)
path = config.home.homeDirectory + "/.secrets/scug_io_api_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
set -x PI_LENS_STARTUP_MODE quick
'';
};
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"
"@xberg-io/opencode-tree-sitter-language-pack"
];
provider.litellm = {
npm = "@ai-sdk/openai-compatible";
name = "LiteLLM (scuggo)";
options = {
baseURL = "https://9f5db439.fwds.scug.io/v1";
apiKey = "{env:SCUG_IO_API_KEY}";
};
};
};
};
}; };
}; };
} }
-17
View File
@@ -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;
};
};
}
-294
View File
@@ -1,294 +0,0 @@
{
den,
modules,
inputs,
...
}:
{
modules.pi-coding = {
homeManager =
{ pkgs, ... }:
{
programs.pi-coding-agent = {
enable = true;
extraPackages = [
pkgs.nodejs
# pkgs.lean-lsp-mcp
];
package = pkgs.pi-coding-agent.overrideAttrs (
new: old: {
version = "0.81.1";
src = pkgs.fetchFromGitHub {
owner = "earendil-works";
repo = "pi";
tag = "v${new.version}";
hash = "sha256-xo3uoR7HceOCL3wqoMcacOe8WXP1o7ReAXne5t6Hgao=";
};
npmDepsHash = "sha256-lzKQZbnITzgV9koucsMno6f61ubBLYUcwQEXtak1r1s=";
# npmDepsHash = pkgs.lib.fakeHash;
# npmDepsHash = "sha256-lDoj/94tjJd4ZGU9WgrMOqNSmdpeCljU4c6jGX+TSDY=";
npmDeps = pkgs.fetchNpmDeps {
inherit (new) src;
name = "pi-coding-agent-0.81.1-npm-deps";
hash = new.npmDepsHash;
};
modelData = pkgs.fetchurl {
url = "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-${new.version}.tgz";
hash = "sha256-x53MD5DU370ZdNoz36P+OWZjGVpoM5sfVcEU2/ckDy8=";
# hash = pkgs.lib.fakeHash;
};
preConfigure = ''
mkdir -p packages/ai/src/providers/data
tar --extract --gzip --file=${new.modelData} \
--directory=packages/ai/src/providers/data \
--strip-components=4 \
package/dist/providers/data
'';
passthru.updateScript = pkgs.nix-update-script {
extraArgs = [
"--custom-dep"
"modelData"
];
};
}
);
settings = {
"openrouter" = {
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"litellm" = {
"providers" = {
"litellm" = {
"displayName" = "scuggo";
"baseUrl" = "https://9f5db439.fwds.scug.io";
"apiKey" = "$SCUG_IO_API_KEY";
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
};
"skills" = {
"enabled" = true;
};
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"mcp" = {
"enabled" = true;
};
"showCacheMissNotices" = true;
"vstack" = {
"extensionManager" = {
"config" = {
"@vanillagreen/pi-qol" = {
"statusline.enabled" = false;
"showSessionNameTitle" = false;
"permissionGate" = {
"enabled" = true;
"commands" = "rm -Rf,rm -rf,sudo,chmod,chown,mkfs,dd,shutdown,reboot,poweroff";
"previewLines" = 12;
"previewChars" = 1200;
};
"thinkingLabel" = {
"text" = "🧠";
"showTimer" = true;
};
};
};
};
};
packages = [
# "npm:@odinlayer/pi-provider-litellm"
"npm:pi-provider-litellm"
# "npm:pi-web-access"
# "npm:@gotgenes/pi-permission-system"
"npm:@vanillagreen/pi-extension-manager"
"npm:@vanillagreen/pi-qol"
"npm:pi-vitals"
"npm:pi-spark"
"npm:@zhushanwen/pi-context-engineering"
"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"
];
};
context = ''
[CORE TOOLING DOCTRINE OBEY WITHOUT EXCEPTION]
[FILE OPERATIONS]
- `read` (supports .nix, .ts, .js, .json, .yaml, .yml, .md, .html, .css, .sh, .bash, .c, .h, .rs, .go, .py, .rb, .lua, .toml, .cfg, .ini, .xml, .wasm, .wat, .wat, .webp, .bmp, .jpg, .png, .gif, .svg, .png, .ttf, .woff, .woff2): reads file content, truncates at 2000 lines / 50KB. Use offset/limit for large files. For images returns attachment. For text returns content.
- `write` (supports any path): creates file if missing, overwrites if exists. Auto-creates parent dirs. Use for new files or full rewrites.
- `edit` (supports any path): precise text replacement. Every edits[].oldText must match a unique, non-overlapping region. Merge nearby changes into single edit. Do NOT include large unchanged regions just to connect distant edits. Prefer smallest possible oldText for uniqueness.
- NEVER use `cat`, `echo`, `tee`, `sed -i`, `head`, `tail` for file content. These bypass the dispatch pipeline and lose context.
- NEVER use `find` on the nix store. It is DANGEROUS AND EVIL walks /nix/store with no pruning. Use `ls` on known store paths, `grep`, `symbol_search`, or `module_report` instead.
[TEXT SEARCH]
- `rg` (ripgrep) for pattern matching in files. Flags: `-n` (line numbers), `-u` (respect .gitignore, default), `-i` (case-insensitive), `--no-heading` (suppress filename prefix).
- NEVER combine `find` + `xargs grep` or `find` + `ls` + `grep`. `rg` is always available and respects .gitignore.
- For glob-based file discovery: use `find` (the tool) with patterns like `*.ts`, `**/*.json`. This is fine `find` is the file-system tool, not the nix-store walker.
- For content search across files: `grep` with optional glob filter (e.g. `grep -rn "pattern" --glob="*.rs"`).
[CODE NAVIGATION]
- `symbol_search`: ranked BM25 identifier search over persisted word index. Answers "which files are relevant to <query>". Pair with `module_report` for file outline and `read_symbol` for symbol body.
- `module_report`: structured file outline returns each symbol's name/kind/signature/line-range, who-uses-this, risk flags, recommendedReads. Pass `blastRadius: true` for transitive dependents.
- `read_enclosing`: smallest enclosing symbol/callback for a given line. Use after `ast_grep_search`, diagnostics, or LSP locations when you need exact body without reading whole file.
- `lsp_diagnostics`: LSP-level errors/warnings/hints. Use BEFORE building. Supports paths (file or directory), severity filter, concurrency control.
- NEVER use `find` + manual parsing for code navigation. Always use symbol_search/module_report/read_symbol first.
[DIAGNOSTICS]
- `lens_diagnostics` (default: mode=delta, current turn's fixable warnings): fast, current-turn only. Use for "what needs fixing right now?"
- `lens_diagnostics` (mode=all): session diagnostics for ALL files edited this session. Shows blocking errors with messages, not just counts. Unedited files with pre-existing errors DO NOT appear.
- `lens_diagnostics` (mode=full): expensive project-wide LSP scan + cached runner diagnostics. Use before declaring work done. Bounded by slowest analyzer (~180s ceiling for trivy).
- `lsp_diagnostics`: LSP-only diagnostics. Use before builds to proactively catch type errors.
- NEVER use `grep` + manual diagnostic interpretation. Always route through lens_diagnostics/lsp_diagnostics.
[SHARED TOOLS]
- `recall_context(id)`: recall original content compressed by context engineering. Use when full content of expired/truncated/condensed tool result is needed.
- `bash`: execute shell commands. For text search: `rg -n`. For text extraction: `rg --output-format json`. For file operations: prefer `read`/`write`/`edit`. For system commands: git, nix, builds, scripts, network.
- `bash` with `timeout`: set timeout for long-running operations. Use for builds, nix operations, network requests.
[BEHAVIORAL CONSTRAINTS]
- Always prefer `read`/`write`/`edit` over any raw shell equivalent for file operations.
- Always prefer `rg` over `find` + `grep` for text search.
- Always prefer `symbol_search`/`module_report` over `find` + manual parsing for code navigation.
- Always prefer `lens_diagnostics`/`lsp_diagnostics` over `grep` + manual diagnostic interpretation.
- Use `bash` ONLY for commands that genuinely need a shell (git, nix, builds, scripts, network, system management).
- When editing files, always use `edit` (not `write` with partial content). `edit` is precise and tracks what changed.
- When creating new files or doing full rewrites, use `write`.
- When searching file contents, always use `grep`.
- When running builds, always check `lsp_diagnostics`/`lens_diagnostics` first.
- When declaring work done, always run `lens_diagnostics mode=full` to verify no blocking errors remain.
- When context is expired/truncated/condensed, use `recall_context(id)` to recover full content.
- When reading large files, use offset/limit to navigate never read entire 10000+ line files.
[CRITICAL RULES]
- NEVER use `find` on the nix store (/nix/store/*). It is DANGEROUS AND EVIL extremely expensive, slow, locks up execution.
- Use `ls` on known store paths. Use `grep`, `symbol_search`, or `module_report` for discovery.
- If you need to discover something, ask the user for the path rather than guessing.
- This rule is ABSOLUTE. No exceptions. No edge cases.
'';
};
# 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"
"context_pct"
];
icons = {
pi = "π";
model = "";
thinking = "🧠";
folder = "📁";
repo = "📦";
git = "";
tokens = "";
input = "";
output = "";
cacheRead = "";
cacheWrite = "";
contextPct = "";
cost = "$";
separator = "";
};
colors = {
pi = "accent";
model = "#d787af";
path = "#00afaf";
git = "success";
gitDirty = "warning";
gitClean = "success";
thinking = "muted";
context = "dim";
contextWarn = "warning";
contextError = "error";
cost = "text";
tokens = "muted";
separator = "dim";
};
segmentOptions = {
path = {
mode = "basename";
};
git = {
showBranch = true;
showStaged = true;
showUnstaged = true;
showUntracked = true;
};
context_pct = {
showAutoIcon = false;
};
};
};
};
# 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";
};
};
recap = {
idle = "5m";
provider = "openai-codex";
model = "gpt-5.4-mini";
thinkingLevel = "off";
};
title = {
provider = "openai-codex";
model = "gpt-5.4-mini";
thinkingLevel = "off";
};
};
};
};
};
}
-1
View File
@@ -7,7 +7,6 @@
settings = { settings = {
global = { global = {
font = "Noto Nerd Font 8"; font = "Noto Nerd Font 8";
monitor = "DP-2";
}; };
}; };
}; };
+5 -17
View File
@@ -1,12 +1,5 @@
{ 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;
@@ -15,10 +8,7 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
home.shell.enableFishIntegration = true; home.shell.enableFishIntegration = true;
home.packages = [ home.packages = [ pkgs.nix-output-monitor ];
pkgs.nix-output-monitor
# pkgs.devenv
];
programs = { programs = {
fish = { fish = {
enable = true; enable = true;
@@ -28,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";
@@ -54,7 +42,7 @@
}; };
direnv = { direnv = {
enable = true; enable = true;
enableFishIntegration = true; nix-direnv.enable = true;
}; };
}; };
}; };
-36
View File
@@ -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";
}
];
};
};
}
-40
View File
@@ -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";
};
};
};
};
};
}
+11 -18
View File
@@ -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" ];
})
]; ];
}; };
}; };
+3 -32
View File
@@ -16,39 +16,10 @@
modules.helium = settings: { modules.helium = settings: {
homeManager = homeManager =
{ pkgs, ... }: { 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" \
--add-flags "--disable-gpu-sandbox"
'';
};
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" = {
+168 -204
View File
@@ -7,195 +7,7 @@
modules.dunst modules.dunst
]; ];
homeManager = homeManager =
{ { pkgs, home, ... }:
pkgs,
home,
...
}:
let
tofiCfg = pkgs.writeTextFile {
name = "hyprland-tofi-config";
text = ''
width = 100%
height = 100%
border-width = 0
outline-width = 0
padding-left = 35%
padding-top = 35%
result-spacing = 25
num-results = 5
font = monospace
background-color = #000A
'';
};
meowScript = pkgs.writeShellScript "meow" ''
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
'';
mreowScript = pkgs.writeShellScript "mreow" ''
exec $(tofi-drun -c ${tofiCfg})
'';
mainMod = "SUPER";
hlBind = key: dispatcher: "hl.bind(\"${key}\", ${dispatcher})";
workspaceLines = pkgs.lib.concatLists (
builtins.genList (
i:
let
ws = toString (i + 1);
in
[
(hlBind "${mainMod} + ${ws}" "hl.dsp.focus({ workspace = ${ws} })")
(hlBind "${mainMod} + SHIFT + ${ws}" "hl.dsp.window.move({ workspace = ${ws} })")
]
) 9
);
hlBindCode = pkgs.lib.concatStringsSep "\n" (
[
"-- Hyprland configuration"
""
"local mainMod = \"${mainMod}\""
""
"-- Config"
"hl.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 = {"
" no_hardware_cursors = false,"
" },"
" dwindle = {"
" preserve_split = true,"
" },"
" misc = {"
" force_default_wallpaper = -1,"
" disable_hyprland_logo = false,"
" enable_anr_dialog = false,"
" },"
"})"
""
"-- Monitors"
"hl.monitor({ output = \"HDMI-A-1\", mode = \"1920x1080@60\", position = \"0x0\", scale = \"1\" })"
"hl.monitor({ output = \"DP-2\", mode = \"1920x1080@120\", position = \"1920x0\", scale = \"1\" })"
""
"-- Input"
"hl.device({ name = \"default\", kb_layout = \"gb\", sensitivity = -0.5 })"
""
"-- Curves"
"hl.curve(\"easeOutQuint\", { type = \"bezier\", points = { {0.23, 1}, {0.32, 1} } })"
"hl.curve(\"easeInOutCubic\", { type = \"bezier\", points = { {0.65, 0.05}, {0.36, 1} } })"
"hl.curve(\"linear\", { type = \"bezier\", points = { {0, 0}, {1, 1} } })"
"hl.curve(\"almostLinear\", { type = \"bezier\", points = { {0.5, 0.5}, {0.75, 1} } })"
"hl.curve(\"quick\", { type = \"bezier\", points = { {0.15, 0}, {0.1, 1} } })"
""
"-- Animations"
"hl.animation({ leaf = \"global\", enabled = true, speed = 10, bezier = \"default\" })"
"hl.animation({ leaf = \"border\", enabled = true, speed = 5.39, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"windows\", enabled = true, speed = 2.79, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"windowsIn\", enabled = true, speed = 1, bezier = \"easeOutQuint\", style = \"popin 87%\" })"
"hl.animation({ leaf = \"windowsOut\", enabled = true, speed = 1, bezier = \"linear\", style = \"popin 87%\" })"
"hl.animation({ leaf = \"windowsMove\", enabled = true, speed = 1, bezier = \"easeInOutCubic\" })"
"hl.animation({ leaf = \"fadeIn\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fadeOut\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fade\", enabled = true, speed = 1, bezier = \"quick\" })"
"hl.animation({ leaf = \"layers\", enabled = true, speed = 3.81, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"layersIn\", enabled = true, speed = 4, bezier = \"easeOutQuint\", style = \"fade\" })"
"hl.animation({ leaf = \"layersOut\", enabled = true, speed = 1.5, bezier = \"linear\", style = \"fade\" })"
"hl.animation({ leaf = \"fadeLayersIn\", enabled = true, speed = 1.79, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fadeLayersOut\", enabled = true, speed = 1.39, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"workspaces\", enabled = true, speed = 1, bezier = \"almostLinear\", style = \"slide\" })"
"hl.animation({ leaf = \"workspacesIn\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
"hl.animation({ leaf = \"workspacesOut\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
"hl.animation({ leaf = \"zoomFactor\", enabled = true, speed = 7, bezier = \"quick\" })"
""
"-- Binds"
(hlBind "${mainMod} + R" "hl.dsp.exec_cmd(\"${mreowScript}\")")
(hlBind "${mainMod} + C" "hl.dsp.window.close()")
(hlBind "${mainMod} + M" "hl.dsp.exec_cmd(\"uwsm stop\")")
(hlBind "${mainMod} + Q" "hl.dsp.exec_cmd(\"kitty\")")
(hlBind "${mainMod} + V" "hl.dsp.window.float({ action = \"toggle\" })")
(hlBind "${mainMod} + left" "hl.dsp.focus({ direction = \"left\" })")
(hlBind "${mainMod} + right" "hl.dsp.focus({ direction = \"right\" })")
(hlBind "${mainMod} + up" "hl.dsp.focus({ direction = \"up\" })")
(hlBind "${mainMod} + down" "hl.dsp.focus({ direction = \"down\" })")
(hlBind "${mainMod} + L" "hl.dsp.exec_cmd(\"wlogout\")")
(hlBind "${mainMod} + S" "hl.dsp.exec_cmd(\"wayfreeze --after-freeze-cmd '${meowScript}'\")")
(hlBind "${mainMod} + F" "hl.dsp.window.fullscreen({ action = \"toggle\" })")
(hlBind "${mainMod} + SHIFT + Q" "hl.dsp.window.close()")
(hlBind "${mainMod} + mouse_down" "hl.dsp.focus({ workspace = \"e+1\" })")
(hlBind "${mainMod} + mouse_up" "hl.dsp.focus({ workspace = \"e-1\" })")
""
"-- Mouse binds"
(hlBind "${mainMod} + mouse:272" "hl.dsp.window.drag()")
(hlBind "${mainMod} + mouse:273" "hl.dsp.window.resize()")
""
"-- Media keys"
(hlBind "XF86AudioLowerVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")")
(hlBind "XF86AudioRaiseVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")")
(hlBind "XF86AudioMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
(hlBind "XF86AudioPlay" "hl.dsp.exec_cmd(\"playerctl play-pause\")")
(hlBind "XF86AudioNext" "hl.dsp.exec_cmd(\"playerctl next\")")
(hlBind "XF86AudioPrev" "hl.dsp.exec_cmd(\"playerctl previous\")")
(hlBind "XF86AudioMicMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
(hlBind "home" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
(hlBind "end" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
(hlBind "F8" "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })")
""
"-- Workspaces"
(hlBind "${mainMod} + 0" "hl.dsp.focus({ workspace = 10 })")
(hlBind "${mainMod} + SHIFT + 0" "hl.dsp.window.move({ workspace = 10 })")
]
++ workspaceLines
++ [
""
"-- Window rules"
"hl.window_rule({ suppress_event = \"maximize\" })"
"hl.window_rule({ match = { class = \"gamescope\" }, workspace = \"5\", immediate = true, confine_pointer = true })"
"hl.window_rule({ match = { class = \"steam\" }, workspace = \"6 silent\" })"
"hl.window_rule({ match = { class = \"vesktop\" }, workspace = \"8 silent\" })"
"hl.window_rule({ match = { class = \"org.telegram.desktop\" }, workspace = \"8 silent\" })"
"hl.window_rule({ match = { class = \"com.obsproject.Studio\" }, workspace = \"10 silent\" })"
"hl.window_rule({ match = { initial_title = \"OBS Studio Crash Detected\" }, pin = true })"
"hl.window_rule({ match = { initial_title = \"Discord Popout\" }, workspace = \"1 silent\" })"
""
"-- Layer rules"
"hl.layer_rule({ match = { namespace = \"notifications\" }, no_screen_share = true })"
""
"-- Host-specific overrides"
"local home = os.getenv(\"HOME\")"
"if home then"
" local f = io.open(home .. '/.config/hypr/hyprland-local.lua', 'r')"
" if f then"
" _ = f:close()"
" local config = loadfile(home .. '/.config/hypr/hyprland-local.lua')"
" if config then config() end"
" end"
"end"
]
);
in
{ {
home.packages = [ home.packages = [
pkgs.hyprcursor pkgs.hyprcursor
@@ -212,24 +24,176 @@
package = pkgs.rose-pine-hyprcursor; package = pkgs.rose-pine-hyprcursor;
hyprcursor.enable = true; hyprcursor.enable = true;
}; };
services.hyprpaper = { wayland.windowManager.hyprland.settings = {
enable = true; env = [
settings = { "XCURSOR_THEME,BreezeX-RosePine-Linux"
splash = true; "XCURSOR_SIZE,24"
wallpaper = [ "HYPRCURSOR_SIZE,24"
{ "__GLX_VENDOR_LIBRARY_NAME,nvidia"
monitor = "HDMI-A-1"; "WEBKIT_DISABLE_DMABUF_RENDERER,1" # maybe disable if nixos fixes alcom
path = "/home/doloro/Wallpaper.jpg"; ];
} general = {
{ gaps_in = 1;
monitor = "DP-2"; gaps_out = 1;
path = "/home/doloro/Wallpaper.jpg"; 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;
}; };
xdg.configFile."hypr/hyprland.lua" = { # master = {
source = pkgs.writeText "hyprland.lua" hlBindCode; # new_status = master;
# };
misc = {
force_default_wallpaper = -1;
disable_hyprland_logo = false;
enable_anr_dialog = false;
vfr = true;
};
"$mainMod" = "SUPER";
bind = [
(
let
config = pkgs.writeTextFile {
name = "config";
text = ''
width = 100%
height = 100%
border-width = 0
outline-width = 0
padding-left = 35%
padding-top = 35%
result-spacing = 25
num-results = 5
font = monospace
background-color = #000A
'';
};
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'
'';
in
"$mainMod, S, exec, " + "wayfreeze --after-freeze-cmd '${script}'"
)
"$mainMod, F, fullscreen"
"$mainMod, mouse_down, workspace, e+1"
"$mainMod, mouse_up, workspace, e-1"
", home, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", end, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
", F8, pass, class:^(com\.obsproject\.Studio)$"
"$mainMod, 0, workspace, 10"
"$mainMod SHIFT, 0, movetoworkspace, 10"
]
++ (builtins.concatLists (
builtins.genList (
i:
let
ws = i + 1;
in
[
"$mainMod, ${toString ws}, workspace, ${toString ws}"
"$mainMod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
]
) 9
));
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
windowrule = [
"match:class .*, suppress_event maximize"
"match:class ^(gamescope)$, workspace 5"
"match:class ^(gamescope)$, immediate true"
"match:class ^(steam)$, workspace 6 silent"
"match:class ^(vesktop)$, workspace 8 silent"
"match:class ^(org.telegram.desktop)$, workspace 8 silent"
"match:class ^(com.obsproject.Studio)$, workspace 10 silent"
"match:initial_title ^(OBS Studio Crash Detected)$, pin true"
"match:initial_title ^(Discord Popout)$, workspace 1 silent"
];
layerrule = [
"match:namespace ^(notifications)$, no_screen_share true"
# "match:namespace ^(quickshell)$, blur true"
];
# exec-once = [
# ];
# we need to auto launch: quickshell, steam, ar_rpc (maybe), vesktop, telegram, qbit, and obs
}; };
}; };
}; };
+8 -5
View File
@@ -3,12 +3,15 @@
inputs, inputs,
lib, lib,
... ...
}: { }:
{
flake-file.inputs = { flake-file.inputs = {
hyprland.url = "github:hyprwm/Hyprland"; hyprland.url = "github:hyprwm/Hyprland";
}; };
modules.hyprland = { modules.hyprland = {
nixos = {pkgs, ...}: { nixos =
{ pkgs, ... }:
{
imports = [ inputs.hyprland.nixosModules.default ]; imports = [ inputs.hyprland.nixosModules.default ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wayfreeze wayfreeze
@@ -43,15 +46,15 @@
# package32 = pkgs-unstable.pkgsi686Linux.mesa; # package32 = pkgs-unstable.pkgsi686Linux.mesa;
}; };
}; };
homeManager = {pkgs, ...}: { homeManager =
{ pkgs, ... }:
{
gtk = { gtk = {
enable = true; enable = true;
}; };
# backupFileExtension = "backupHM";
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
systemd.variables = [ "--all" ]; systemd.variables = [ "--all" ];
configType = "lua";
}; };
}; };
}; };
-20
View File
@@ -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 -5
View File
@@ -1,8 +1,5 @@
{ den, modules, ... }:
{ {
den,
modules,
...
}: {
modules.kitty = { modules.kitty = {
homeManager = { homeManager = {
programs.kitty = { programs.kitty = {
@@ -15,7 +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;
}; };
}; };
}; };
+3 -3
View File
@@ -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;
}; };
} }
+21 -21
View File
@@ -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,13 +56,13 @@
# 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
@@ -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
@@ -123,7 +123,7 @@
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
+6 -8
View File
@@ -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"
+25 -239
View File
@@ -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,18 +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" ];
};
in
{ {
imports = [ imports = [
inputs.nixvim.homeModules.nixvim inputs.nixvim.homeModules.nixvim
@@ -43,24 +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;
# };
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;
@@ -70,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 = {
@@ -109,12 +86,12 @@
lsp = { lsp = {
enable = true; enable = true;
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;
@@ -122,26 +99,14 @@
}; };
nixd = { nixd = {
enable = true; enable = true;
settings = {
nixd = {
nixpkgs.expr = "import (builtins.getFlake \"${toString /home/doloro/dotfiles}\").inputs.nixpkgs { }";
options = {
nixos.expr = "(builtins.getFlake \"${toString /home/doloro/dotfiles}\").nixosConfigurations.desktop.options";
home_manager.expr = "(builtins.getFlake \"${toString /home/doloro/dotfiles}\").homeConfigurations.doloro-desktop.options";
};
};
};
}; };
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;
}; };
}; };
@@ -173,7 +138,7 @@
"fileformat" "fileformat"
"filetype" "filetype"
]; ];
lualine_y = [ "progress" ]; lualine_y = [ "lsp_status" ];
lualine_z = [ "location" ]; lualine_z = [ "location" ];
}; };
inactive_sections = { inactive_sections = {
@@ -188,10 +153,7 @@
}; };
web-devicons.enable = true; web-devicons.enable = true;
vim-dadbod-completion.enable = true; vim-dadbod-completion.enable = true;
telescope = { telescope.enable = true;
enable = true;
extensions.file-browser.enable = true;
};
lazygit.enable = true; lazygit.enable = true;
mini-indentscope = { mini-indentscope = {
enable = true; enable = true;
@@ -209,55 +171,15 @@
}; };
}; };
}; };
lsp-lines.enable = true; trouble.enable = true;
trouble = {
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 = "path"; }
{ 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"; }
}
{
name = "nvim_lsp_signature_help";
priority = 90;
}
{
name = "luasnip";
priority = 75;
}
{
name = "buffer";
priority = 50;
}
{
name = "path";
priority = 40;
}
]; ];
mapping = { mapping = {
"<C-Space>" = "cmp.mapping.complete()"; "<C-Space>" = "cmp.mapping.complete()";
@@ -265,26 +187,13 @@
"<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'})";
};
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 = { auto-session = {
enable = false; enable = false;
@@ -299,9 +208,6 @@
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
@@ -310,8 +216,6 @@
nix nix
regex regex
toml toml
tsx
typescript
vim vim
vimdoc vimdoc
xml xml
@@ -320,13 +224,15 @@
]; ];
settings = { settings = {
highlight.enable = true; highlight.enable = true;
indent.enable = false;
}; };
}; };
}; };
extraPlugins = with pkgs; [ extraPlugins = with pkgs; [
vimPlugins.cmp-nvim-lsp-signature-help # vimPlugins.mini-completion
tiny-code-action vimPlugins.mini-comment
vimPlugins.melange-nvim
vimPlugins.telescope-file-browser-nvim
vimPlugins.lsp-progress-nvim
]; ];
opts = { opts = {
number = true; number = true;
@@ -334,25 +240,10 @@
tabstop = 2; tabstop = 2;
shiftwidth = 2; shiftwidth = 2;
termguicolors = true; termguicolors = true;
completeopt = "menu,menuone,noselect";
}; };
globals = { globals = {
mapleader = " "; mapleader = " ";
}; };
extraConfigLua = ''
-- 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>Telescope persisted<cr>"; action = "<cmd>Telescope persisted<cr>";
@@ -401,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>Telescope 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
View File
@@ -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" ];
}; };
}; };
}; };
+1 -1
View File
@@ -18,7 +18,7 @@
# 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 +1 @@
/run/user/1000/quickshell/vfs/ca6d8e2cdd46bffdf799708f31d409fa/.qmlls.ini /run/user/1000/quickshell/vfs/6e389f6b800776b0595d9d90e42ebd04/.qmlls.ini
+4 -20
View File
@@ -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
} }
} }
} }
}
+13 -8
View File
@@ -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;
}; };
}; };
}; };
+17 -18
View File
@@ -3,10 +3,10 @@ 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]
sops: sops:
age: age:
- enc: | - recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZC9ZVlY2T0tXdy90b2hV YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZC9ZVlY2T0tXdy90b2hV
dDUxUjNyMjllQStaa0tKRy9YVkNIdFJyWTI4CitYNnhxN3JHQ3lsWXp2Tmgwek9n dDUxUjNyMjllQStaa0tKRy9YVkNIdFJyWTI4CitYNnhxN3JHQ3lsWXp2Tmgwek9n
@@ -14,8 +14,8 @@ sops:
MkVQY3h2OGhGaGNnYkVJUU1kK3F3VWMKs9B74KovGxx8KL5q/lGA/imVRM/i3mo/ MkVQY3h2OGhGaGNnYkVJUU1kK3F3VWMKs9B74KovGxx8KL5q/lGA/imVRM/i3mo/
a6Rbxufscp3WWGMbo70w8tWuRsAnIpUGh3EvWCekZ9nOzeMiVA8I2Q== a6Rbxufscp3WWGMbo70w8tWuRsAnIpUGh3EvWCekZ9nOzeMiVA8I2Q==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838 - recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
- enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0dXJzYndvSC92aElvTVpz YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0dXJzYndvSC92aElvTVpz
SUtTOWFzcUJxOHVrTk5scm5tcGkzRmEvK1hVClNVbmp3ZjBRTW5ZNXVNNGh3dSti SUtTOWFzcUJxOHVrTk5scm5tcGkzRmEvK1hVClNVbmp3ZjBRTW5ZNXVNNGh3dSti
@@ -23,8 +23,8 @@ sops:
Tk5Zd0h3OHRpQzZjazJKUStPUVdERzQKGnoKYKq7pPJUrcAWJ4/tm8mSxuthjssz Tk5Zd0h3OHRpQzZjazJKUStPUVdERzQKGnoKYKq7pPJUrcAWJ4/tm8mSxuthjssz
7IsjH4t6VCyug2c7XnLJpcE64yPD+GrXHYixP0r2qj80WMjpv7N7qA== 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+IFgyNTUxOSBLbGQ3MkVCUldqa3dYRTg0 YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLbGQ3MkVCUldqa3dYRTg0
NjVoUDdIc0RvSU02R0o0ZVk4KzVQMkZmeXpjClJaUUU3WTJVQmJkRzV4UTc3bXFI NjVoUDdIc0RvSU02R0o0ZVk4KzVQMkZmeXpjClJaUUU3WTJVQmJkRzV4UTc3bXFI
@@ -32,8 +32,8 @@ sops:
QzhtM3V3VGFzdk9UenV6akxGNDh5d3cKdIKNPvM0GRJamiS4AXRNU+TbuZUnM6K7 QzhtM3V3VGFzdk9UenV6akxGNDh5d3cKdIKNPvM0GRJamiS4AXRNU+TbuZUnM6K7
FtC1dmHlyU/tXlFHv6TNlMZQtDgIVnE72Jvk48maq3oKiJAXWk11fg== 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+IFgyNTUxOSBoOHlRcnRwWUYwUGRSVW9s YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoOHlRcnRwWUYwUGRSVW9s
cmdDZjN1RGFRVWtlODBudGpaemd3UDBZcnhRCksyWlk3VW91a3pnOGNQQVppM09z cmdDZjN1RGFRVWtlODBudGpaemd3UDBZcnhRCksyWlk3VW91a3pnOGNQQVppM09z
@@ -41,8 +41,8 @@ sops:
bWFTMlhCL2IrZjlEOUFydmE4cHBzSmMKhIk8TZtRsIFKzopZCyp27SWYeHmf6jKn bWFTMlhCL2IrZjlEOUFydmE4cHBzSmMKhIk8TZtRsIFKzopZCyp27SWYeHmf6jKn
VoIXQ6/VRRQjCYBsseZE5N+ycnr4ZC/RpXJ577G4TfGMCcixX67AfA== 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+IFgyNTUxOSBuTG9LKzVvUjZEZ1lkMVJN YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTG9LKzVvUjZEZ1lkMVJN
eldHSkRXQ241bnZmbHBmSXFNMU1seGcyaVNRCjNPaS9ITEJtdGRwOENDRytEMFk1 eldHSkRXQ241bnZmbHBmSXFNMU1seGcyaVNRCjNPaS9ITEJtdGRwOENDRytEMFk1
@@ -50,8 +50,8 @@ sops:
WTR2RU9GUVdsZHdleW1Gd2lyRENzSm8KznMUQ6Ah8O03AzZcCXgUIjjrV1cdkAnq WTR2RU9GUVdsZHdleW1Gd2lyRENzSm8KznMUQ6Ah8O03AzZcCXgUIjjrV1cdkAnq
Pbr2BwdLzJvlF5lzmymIZEt35euv/HzhJGWDLWGpYJmYj/N8qZgBuA== 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+IFgyNTUxOSAxSDNMRlNaMXB2ZXBPTlNu YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxSDNMRlNaMXB2ZXBPTlNu
eG5BWE5xRTNnVUFtN2psUFVHejZVbFVCQTBFCkRXQitoL0VJaXZmMlI3Q0JHVWk1 eG5BWE5xRTNnVUFtN2psUFVHejZVbFVCQTBFCkRXQitoL0VJaXZmMlI3Q0JHVWk1
@@ -59,8 +59,8 @@ sops:
Q0x4bDFBTzV2L0E3UXQxMUdubVJZRTgKcPQZ9zHQAFwP/Odnh5INleUsHSN06U+x Q0x4bDFBTzV2L0E3UXQxMUdubVJZRTgKcPQZ9zHQAFwP/Odnh5INleUsHSN06U+x
X98535uapyJR/Wswxj6ukdciMOou8cLfOInLwJgWOf6mZklEhecVXA== X98535uapyJR/Wswxj6ukdciMOou8cLfOInLwJgWOf6mZklEhecVXA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv - recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
- enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTaE1mUUlyVUxKQmhPMnlT YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTaE1mUUlyVUxKQmhPMnlT
eS81cE5TeE1WWFVIRkdWT3c0ckhNMnFYZGxrCnp4My9nK20zcGVxUFZ0cnVVTDBS eS81cE5TeE1WWFVIRkdWT3c0ckhNMnFYZGxrCnp4My9nK20zcGVxUFZ0cnVVTDBS
@@ -68,8 +68,7 @@ sops:
bzJvaUg2VkFrazBoWmlIY2hKeUdhTjQKbgW+ysm3TWBKfVoKAeqvaPio29SyzjJP bzJvaUg2VkFrazBoWmlIY2hKeUdhTjQKbgW+ysm3TWBKfVoKAeqvaPio29SyzjJP
61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g== 61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp lastmodified: "2026-02-14T00:08:39Z"
lastmodified: "2026-07-22T22:45:05Z" mac: ENC[AES256_GCM,data:lp9ZeDxt5gkOkDmYk+F0VQrVhkR0tQiQlYXbygoA8Dcq+gV0IIKKLwRqr5CVfgfRlo3239IwmKLsGaS6zYC1xX4toZ8oqw3Ic2UvP2CiWt6M7HTrlL+3Y2+PKOUvGl7RAqQxQAw7QaoxB4esqdIiWnMDueVHk5BTKrkay+afhno=,iv:NAMaZ9SMBAtROTBSQtU0RJDB60MAuE82AFoPtDqVHVM=,tag:RGBUTQC1pM+LcBweSJbc6w==,type:str]
mac: ENC[AES256_GCM,data:jfbsnWcZ6yJSUbRn8VbONhj3oin1+DsHzJ590BbdPtikZwjD/0f06NQ86b0DI5/M+LKP4Dy5Cyf7xyJ99iWuOKbF9y12qK17IqMaNZCmPkw8Y+v7q38ESsW/Iizr3hfQ2L2GwJNTWsoifCeQphxGby7s2lKjMPYGKhYrgicZ5Fs=,iv:bbL+59d0S1fdfDInLS5z9Vx+AVW6nb0z2BNgZ+5PbUM=,tag:jJYnLsORyEuClRm/t4mwcA==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.13.2 version: 3.11.0
+1 -2
View File
@@ -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;
}; };
}; };
+5 -5
View File
@@ -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
'';
}; };
}; };
}; };
+8 -16
View File
@@ -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
}
'';
};
}; };
}; };
} }
-49
View File
@@ -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
'';
};
};
};
}
-105
View File
@@ -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,warn";
};
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
}
'';
};
};
};
}
+3 -3
View File
@@ -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"
]; ];
+9 -4
View File
@@ -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;
+1 -1
View File
@@ -6,7 +6,7 @@
}: }:
{ {
flake-file.inputs = { flake-file.inputs = {
x1e-kernel.url = "git+https://git.scug.io/nikkuss/x1e-nixos.git"; x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
}; };
modules.surface-patches = { modules.surface-patches = {
nixos = nixos =
+3 -9
View File
@@ -2,11 +2,7 @@
{ {
modules.tmux = { modules.tmux = {
homeManager = homeManager =
{ { home, pkgs, ... }:
home,
pkgs,
...
}:
{ {
programs.tmux = { programs.tmux = {
enable = true; enable = true;
@@ -15,12 +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
''; '';
}; };
}; };
+1 -1
View File
@@ -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";
}; };
}; };
-11
View File
@@ -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;
};
};
};
}
-1
View File
@@ -7,7 +7,6 @@
users.users.${user.userName} = { users.users.${user.userName} = {
extraGroups = [ extraGroups = [
"wheel" "wheel"
"libvirtd"
"networkmanager" "networkmanager"
]; ];
}; };
-15
View File
@@ -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];
};
};
}
Generated
+312 -641
View File
File diff suppressed because it is too large Load Diff
+4 -12
View File
@@ -4,7 +4,6 @@
inputs = { inputs = {
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:vic/flake-file"; flake-file.url = "github:vic/flake-file";
flake-parts = { flake-parts = {
@@ -21,10 +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:vic/import-tree";
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 = {
@@ -32,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";
@@ -50,7 +42,7 @@
url = "github:nix-community/stylix"; url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
x1e-kernel.url = "git+https://git.scug.io/nikkuss/x1e-nixos.git"; x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
zen-browser = { zen-browser = {
url = "github:youwen5/zen-browser-flake"; url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";