Compare commits

..

52 Commits

Author SHA1 Message Date
doloro b8c6862880 meow 2026-07-25 16:10:00 +01:00
doloro 1f4f716de1 meow 2026-07-24 13:18:22 +01:00
doloro d05b4a8483 agent file 2026-07-24 13:17:48 +01:00
doloro 14fb9504a7 things 2026-07-20 23:01:15 +01:00
doloro 0a7e26455d feat: added recovery nixos config 2026-07-18 23:21:30 +01:00
doloro 4da3b6c50f lots of meow 2026-07-18 11:08:32 +01:00
doloro 0c6b788345 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2026-07-13 12:31:50 +01:00
doloro 9c38e07741 "claude. release the files." 2026-07-12 16:05:12 +01:00
doloro d42ad4b44f fixed things and added things 2026-07-01 21:55:36 +01:00
doloro 8f311cc4ba meow 2026-06-29 23:30:19 +01:00
doloro 8742e5a58f nix flake update 2026-06-28 10:18:28 +01:00
doloro c072c583d1 meow 2026-06-23 09:12:21 +01:00
doloro ca0486baff meow 2026-06-20 14:14:40 +01:00
doloro 2b7d77972b meow 2026-06-15 17:48:39 +01:00
doloro 0fb5245525 changes 2026-06-14 13:05:57 +01:00
doloro 8ec7b3429f comit 2026-06-11 00:07:50 +01:00
doloro d8f593c9f0 nix flake update 2026-06-09 22:53:37 +01:00
doloro 2359a79c14 meow 2026-06-09 22:27:33 +01:00
doloro 5ba041b778 a bunch of commits i think 2026-06-07 18:45:11 +01:00
doloro d7eec2970b unity fixes 2026-06-04 12:14:38 +01:00
doloro cf18e8c975 nix flake update nikpkgs 2026-05-30 13:25:29 +01:00
doloro 0842e518cc add: unity 2026-05-30 13:23:07 +01:00
doloro 6de7c0ca67 fixed nik-pkgs & added deadlock mod manager 2026-05-29 15:20:51 +01:00
doloro acb6fb1677 fixes 2026-05-28 13:26:03 +01:00
doloro e45cc182ee nix flake update 2026-05-27 11:38:50 +01:00
doloro 86feb4e601 stuff 2026-05-27 10:59:28 +01:00
doloro ff1629ad1f fixes and cleaning 2026-05-26 13:48:21 +01:00
doloro b93c1ad6aa meow 2026-05-25 23:34:30 +01:00
doloro a9e3deea08 added: rpi binary cache 2026-05-25 20:59:33 +01:00
doloro e1b14b3e07 find file 2026-05-25 15:18:43 +01:00
doloro 2a8f29f35f meow 2026-05-25 15:17:56 +01:00
doloro b92586122e uid fix 2026-05-25 15:12:20 +01:00
doloro e72f3c8dd9 wrong place 2026-05-25 15:01:42 +01:00
doloro 3b0d0e45e3 added more modules to wsl 2026-05-25 14:58:31 +01:00
doloro ffdf1c7e69 default user 2026-05-25 14:50:52 +01:00
doloro 02c8529c83 wsl errors fixed 2026-05-25 14:44:52 +01:00
doloro d486fa170b wsl changes 2026-05-25 14:34:06 +01:00
doloro 7d3a5ba4fa wsl init 2026-05-22 15:00:59 +01:00
doloro 6c609e2fa6 fix build 2026-05-21 17:51:10 +01:00
doloro 140f47649c commit 2026-05-21 15:55:43 +01:00
doloro 212af403dc replaces rpi flake with a maintained one 2026-05-20 16:01:36 +01:00
doloro 1e8337e380 server: added docker reg 2026-05-20 11:54:03 +01:00
doloro 6b8e08fb7a meow 2026-05-19 21:33:08 +01:00
doloro 1977e912ee fix: hyprland breaking 2026-05-15 13:38:03 +01:00
doloro d53bba8961 qol: omp disabled for now 2026-05-15 13:19:08 +01:00
doloro 93ef68a998 nix flake update 2026-05-15 13:14:21 +01:00
doloro 74cadc4f69 nvim is cool now 2026-05-15 12:55:55 +01:00
doloro 5e83cc9863 changes to nvim, added podman to user 2026-05-15 11:47:23 +01:00
doloro 0545039d39 add: claude code 2026-05-12 14:00:47 +01:00
doloro 15c48c0ed3 nix flake update 2026-05-09 00:59:27 +01:00
doloro 49624c8bd1 commit 2026-05-09 00:30:24 +01:00
doloro 9b9a34f708 kernal pera changes 2026-04-30 11:36:28 +01:00
51 changed files with 2610 additions and 842 deletions
+111
View File
@@ -0,0 +1,111 @@
# 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)
@@ -0,0 +1,33 @@
{
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
];
};
};
}
@@ -0,0 +1,77 @@
{ 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";
};
};
}
+88 -23
View File
@@ -11,17 +11,22 @@
<den/primary-user>
den.aspects.doloro-shared
modules.sops
modules.flatpaks
modules.gamemode
modules.hyprland
modules.fish
modules.tuigreet
modules.kitty
modules.nikpkgs
modules.fonts
modules.unity
<modules/hyprland/doloro-settings>
(modules.obs {
audio = true;
autostart = true;
})
<modules/common/gaming>
modules.hytale-launcher
# modules.helium
(<modules/helium> {
default = true;
@@ -31,38 +36,56 @@
modules.quickshell
modules.nix-ld
modules.spotify
modules.easyeffects
modules.lavd
# modules.easyeffects
# modules.lavd
modules.ai
<modules/ai/ollama-cuda>
modules.pi-coding
# modules.omp
modules.podman
# <modules/ai/ollama-cuda>
];
nixos =
{ config, pkgs, ... }:
{
config,
pkgs,
...
}:
{
users.users.doloro = {
shell = pkgs.fish;
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 =
{ home, pkgs, ... }:
{
wayland.windowManager.hyprland.settings = {
monitor = [
"HDMI-A-1, 1920x1080@60, 0x0, 1"
"DP-3, 1920x1080@144, 1920x0, 1"
];
exec-once = [
"hyprctl dispatch workspace 2" # shit solution to get quickshell on the right monitor
];
workspace = [
"name:2, monitor:DP-3"
];
input = {
kb_layout = "gb";
follow_mouse = 2;
sensitivity = -0.5;
};
home,
pkgs,
...
}:
{
xdg.configFile."hypr/hyprland-local.lua" = {
text = ''
exec-once = hyprctl dispatch workspace 2 # shit solution to get quickshell on the right monitor
workspace = name:2, monitor:DP-2
input {
kb_layout = "gb"
follow_mouse = 2
sensitivity = -0.5
}
'';
};
home.packages = with pkgs; [
equibop
@@ -70,11 +93,53 @@
obsidian
# pear-desktop
prismlauncher
deadlock-mod-manager
gamescope
# deadlock-mod-manager
inputs.nik-pkgs.packages.x86_64-linux.grimoire
# gamescope
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.problems.handlers = {
tetrio-plus.broken = "warn";
};
programs.home-manager.enable = true;
};
};
+50 -3
View File
@@ -13,7 +13,11 @@
modules.nix
];
nixos =
{ pkgs, config, ... }:
{
pkgs,
config,
...
}:
{
boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev";
@@ -36,13 +40,34 @@
services.openssh.enable = true;
xdg.portal = {
enable = true;
configPackages = [ pkgs.xdg-desktop-portal-wlr ];
wlr = {
enable = true;
};
};
networking.networkmanager.enable = true;
networking.firewall.enable = false;
environment.systemPackages = with pkgs; [ polkit_gnome ];
security.rtkit.enable = true;
security.polkit.enable = true;
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
libva-minimal
vulkan-loader
];
};
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "nvidia";
NVD_BACKEND = "direct";
};
services.xserver.videoDrivers = [ "nvidia" ];
@@ -62,7 +87,6 @@
services.gnome.gnome-keyring.enable = true;
hardware.nvidia = {
# Modesetting is required.
modesetting.enable = true;
@@ -70,7 +94,7 @@
# 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
# of just the bare essentials.
powerManagement.enable = true;
powerManagement.enable = false;
# Fine-grained power management. Turns off GPU when not in use.
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
@@ -92,7 +116,30 @@
# Optionally, you may need to select the appropriate driver version for your specific GPU.
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;
};
};
};
}
+14 -17
View File
@@ -21,6 +21,7 @@
modules.stylix
modules.quickshell
modules.lavd
modules.omp
# modules.podman
# modules.openvivo
];
@@ -36,23 +37,19 @@
homeManager =
{ 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;
};
};
xdg.configFile."hypr/hyprland-local.lua" = {
text = ''
decoration {
blur {
enabled = false
}
}
input {
kb_layout = "gb"
follow_mouse = 2
sensitivity = 0
}
'';
};
home.packages = with pkgs; [
telegram-desktop
+3 -3
View File
@@ -171,12 +171,12 @@
# "mem_sleep_default=deep"
# "i915.fastboot=1"
# "i915.modeset=1"
# "ahci.mobile_lpm_policy=1"
"ahci.mobile_lpm_policy=1"
# "intel_idle.max_cstate=10"
"processor.max_cstate=10"
"pci=noaer"
# "quiet"
# "splash"
"quiet"
"splash"
# "idle=halt"
];
boot.binfmt.emulatedSystems = [
+8 -8
View File
@@ -3,8 +3,7 @@
modules,
__findFile,
...
}:
{
}: {
den.aspects.doloro-shared = {
includes = [
modules.nixvim
@@ -14,9 +13,11 @@
modules.hyfetch
modules.ssh
];
homeManager =
{ pkgs, lib, ... }:
{
homeManager = {
pkgs,
lib,
...
}: {
home = {
username = "doloro";
homeDirectory = "/home/doloro";
@@ -24,13 +25,12 @@
wl-clipboard
# home-manager
btop
pavucontrol
];
};
programs.home-manager.enable = true;
};
nixos =
{ lib, ... }:
{
nixos = {lib, ...}: {
};
};
}
+34
View File
@@ -0,0 +1,34 @@
{
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
@@ -0,0 +1,22 @@
{
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";
};
};
}
+45 -1
View File
@@ -11,11 +11,28 @@
# <modules/services/traefik>
<modules/services/caddy>
<modules/services/home-assistant>
<modules/services/docker-registry>
<modules/services/ddns>
<modules/services/rtmp-to-whip>
];
nixos = {
nixos =
{ pkgs, ... }:
{
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 = {
enable = true;
allowedTCPPorts = [
@@ -26,11 +43,38 @@
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.package = pkgs.docker;
virtualisation.docker.autoPrune = {
enable = true;
dates = "weekly";
flags = [
"--all"
"--volumes"
];
};
virtualisation.oci-containers.backend = "docker";
services.openssh.enable = true;
nixpkgs.hostPlatform = "aarch64-linux";
nix.gc = {
automatic = true;
};
};
homeManager =
{ pkgs, ... }:
{
home.packages = [
pkgs.btop
];
};
};
}
+17 -3
View File
@@ -3,8 +3,7 @@
__findFile,
lib,
...
}:
{
}: {
# Homes
den.homes.x86_64-linux.doloro-desktop = {
aspect = "doloro-desktop";
@@ -14,6 +13,9 @@
den.homes.aarch64-linux.doloro-laptop = {
userName = "doloro";
};
den.homes.aarch64-linux.doloro-wsl = {
userName = "doloro";
};
# Machines
den.hosts.x86_64-linux.desktop = {
users.doloro = {
@@ -28,6 +30,19 @@
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"];
@@ -36,5 +51,4 @@
type = lib.types.attrs;
description = "Home Manager configurations for users.";
};
}
+1
View File
@@ -6,5 +6,6 @@
inputs.nixpkgs.follows = "nixpkgs";
};
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
nixpkgs-master.url = "github:NixOS/nixpkgs/master";
};
}
+57 -2
View File
@@ -11,9 +11,64 @@
};
};
homeManager =
{ pkgs, ... }:
{ pkgs, config, ... }:
{
home.packages = [ pkgs.opencode ];
home.packages = [
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
@@ -0,0 +1,17 @@
{
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
@@ -0,0 +1,294 @@
{
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,6 +7,7 @@
settings = {
global = {
font = "Noto Nerd Font 8";
monitor = "DP-2";
};
};
};
+17 -5
View File
@@ -1,5 +1,12 @@
{ modules, ... }:
{
modules,
inputs,
...
}:
{
flake-file.inputs = {
direnv-instant.url = "github:Mic92/direnv-instant";
};
modules.fish = {
nixos = {
programs.fish.enable = true;
@@ -8,7 +15,10 @@
{ pkgs, ... }:
{
home.shell.enableFishIntegration = true;
home.packages = [ pkgs.nix-output-monitor ];
home.packages = [
pkgs.nix-output-monitor
# pkgs.devenv
];
programs = {
fish = {
enable = true;
@@ -18,9 +28,11 @@
set -g theme_display_user yes
set -g fish_color_autosuggestion 6F6578
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 = [
{
name = "bobthefish";
@@ -42,7 +54,7 @@
};
direnv = {
enable = true;
nix-direnv.enable = true;
enableFishIntegration = true;
};
};
};
+36
View File
@@ -0,0 +1,36 @@
{ 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
@@ -0,0 +1,40 @@
{ 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";
};
};
};
};
};
}
+18 -11
View File
@@ -4,6 +4,18 @@
nixos =
{ 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 = {
enable = true;
remotePlay.openFirewall = true;
@@ -11,14 +23,14 @@
localNetworkGameTransfers.openFirewall = true;
# Ensure gamescope is inside the steam "fhs"
package = pkgs.steam.override {
extraLibraries = pkgs: [ pkgs.xorg.libxcb ];
extraLibraries = pkgs: [ pkgs.libxcb ];
extraPkgs =
pkgs: with pkgs; [
attr
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libxcursor
libxi
libxinerama
libxscrnsaver
libpng
libpulseaudio
libvorbis
@@ -26,13 +38,8 @@
libkrb5
keyutils
mangohud
gamemode
# gamemode
lsof
(gamescope.overrideAttrs {
enableWsi = true;
# Fixes some games being blurry under wayland backend
NIX_CFLAGS_COMPILE = [ "-fno-fast-math" ];
})
];
};
};
+32 -3
View File
@@ -16,10 +16,39 @@
modules.helium = settings: {
homeManager =
{ 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 = [
inputs.heliumFlake.packages.${pkgs.stdenv.hostPlatform.system}.helium
];
home.packages = [ helium ];
nixpkgs.config.allowUnfree = true;
# Gives me widevine support. yay
xdg.configFile."net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm" = {
+204 -168
View File
@@ -7,7 +7,195 @@
modules.dunst
];
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 = [
pkgs.hyprcursor
@@ -24,176 +212,24 @@
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"
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";
}
];
};
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
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
xdg.configFile."hypr/hyprland.lua" = {
source = pkgs.writeText "hyprland.lua" hlBindCode;
};
};
};
+5 -8
View File
@@ -3,15 +3,12 @@
inputs,
lib,
...
}:
{
}: {
flake-file.inputs = {
hyprland.url = "github:hyprwm/Hyprland";
};
modules.hyprland = {
nixos =
{ pkgs, ... }:
{
nixos = {pkgs, ...}: {
imports = [inputs.hyprland.nixosModules.default];
environment.systemPackages = with pkgs; [
wayfreeze
@@ -46,15 +43,15 @@
# package32 = pkgs-unstable.pkgsi686Linux.mesa;
};
};
homeManager =
{ pkgs, ... }:
{
homeManager = {pkgs, ...}: {
gtk = {
enable = true;
};
# backupFileExtension = "backupHM";
wayland.windowManager.hyprland = {
enable = true;
systemd.variables = ["--all"];
configType = "lua";
};
};
};
+20
View File
@@ -0,0 +1,20 @@
{
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
];
};
};
}
+5 -1
View File
@@ -1,5 +1,8 @@
{ den, modules, ... }:
{
den,
modules,
...
}: {
modules.kitty = {
homeManager = {
programs.kitty = {
@@ -12,6 +15,7 @@
sync_to_monitor = "yes";
background_opacity = 0.6;
cursor_trail = 1;
auto_reload_config = -1;
};
};
};
+3 -3
View File
@@ -3,11 +3,10 @@
modules,
inputs,
...
}:
{
}: {
flake-file.inputs = {
nik-pkgs = {
url = "git+https://git.scug.io/nikkuss/pkgs.git";
url = "git+https://git.scug.io/nikkuss/pkgs.git?ref=main";
inputs.nixpkgs.follows = "nixpkgs";
};
};
@@ -15,5 +14,6 @@
nixos = {
nixpkgs.overlays = [inputs.nik-pkgs.overlays.default];
};
# debug = inputs.nik-pkgs;
};
}
+21 -21
View File
@@ -24,19 +24,19 @@
systemd
# My own additions
xorg.libXcomposite
xorg.libXtst
xorg.libXrandr
xorg.libXext
xorg.libX11
xorg.libXfixes
libxcomposite
libxtst
libxrandr
libxext
libx11
libxfixes
libGL
libva
pipewire
xorg.libxcb
xorg.libXdamage
xorg.libxshmfence
xorg.libXxf86vm
libxcb
libxdamage
libxshmfence
libxxf86vm
libelf
# Required
@@ -56,13 +56,13 @@
# glibc_multi.bin # Seems to cause issue in ARM
# # Without these it silently fails
xorg.libXinerama
xorg.libXcursor
xorg.libXrender
xorg.libXScrnSaver
xorg.libXi
xorg.libSM
xorg.libICE
libxinerama
libxcursor
libxrender
libxscrnsaver
libxi
libsm
libice
gnome2.GConf
nspr
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
# Verified games requirements
xorg.libXt
xorg.libXmu
libxt
libxmu
libogg
libvorbis
SDL
SDL2_image
glew110
glew_1_10
libidn
tbb
@@ -123,7 +123,7 @@
libgcrypt
libvpx
librsvg
xorg.libXft
libxft
libvdpau
# ...
# Some more libraries that I needed to run programs
+8 -6
View File
@@ -1,12 +1,12 @@
{ ... }:
{
{...}: {
flake-file.inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
modules.nix = {
nixos =
{ ... }:
{
nixos = {...}: {
nixpkgs.config.allowUnfree = true;
nix.settings = {
substituters = [
extra-substituters = [
"https://hyprland.cachix.org"
"https://nix-community.cachix.org"
"https://cache.nixos.org/"
@@ -14,6 +14,7 @@
"https://cache.nixos-cuda.org"
"https://niri.cachix.org"
"https://attic.xuyh0120.win/lantian"
"https://nixos-raspberrypi.cachix.org"
];
trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
@@ -22,6 +23,7 @@
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
"lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc="
"nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI="
];
experimental-features = [
"flakes"
+238 -24
View File
@@ -10,7 +10,6 @@
flake-file.inputs = {
nixvim = {
url = "github:nix-community/nixvim";
# inputs.nixpkgs.follows = "nixpkgs";
};
};
modules = {
@@ -21,6 +20,18 @@
};
homeManager =
{ 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 = [
inputs.nixvim.homeModules.nixvim
@@ -32,17 +43,24 @@
config = {
allowUnfree = true;
};
source = inputs.nixpkgs;
};
colorschemes.gruvbox-material.enable = true;
# colorschemes.melange = {
# enable = true;
# autoLoad = false;
# };
extraPackages = with pkgs; [
# formatters
nixfmt
nixfmt-rs
rustfmt
# misc
ripgrep
# misc
nixd
tree-sitter
rust-analyzer
rustc
cargo
];
performance.byteCompileLua = {
enable = true;
@@ -52,10 +70,15 @@
configs = true;
};
plugins = {
luasnip.enable = true;
cmp_luasnip.enable = true;
fidget.enable = true;
mini-comment.enable = true;
# cord.enable = true;
todo-comments.enable = true;
lsp-status.enable = true;
transparent.enable = true;
which-key.enable = true;
snacks.enable = true;
conform-nvim = {
enable = true;
settings = {
@@ -86,12 +109,12 @@
lsp = {
enable = true;
servers = {
qmlls = {
enable = true;
config = {
cmd = "-E";
};
};
# qmlls = {
# enable = true;
# config = {
# cmd = "-E";
# };
# };
rust_analyzer = {
enable = true;
installCargo = false;
@@ -99,14 +122,26 @@
};
nixd = {
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 = {
enable = true;
enable = false;
};
ts_ls = {
enable = true;
};
cssls.enable = true;
cssls = {
enable = true;
package = pkgs.vscode-langservers-extracted;
};
svelte.enable = true;
};
};
@@ -138,7 +173,7 @@
"fileformat"
"filetype"
];
lualine_y = [ "lsp_status" ];
lualine_y = [ "progress" ];
lualine_z = [ "location" ];
};
inactive_sections = {
@@ -153,7 +188,10 @@
};
web-devicons.enable = true;
vim-dadbod-completion.enable = true;
telescope.enable = true;
telescope = {
enable = true;
extensions.file-browser.enable = true;
};
lazygit.enable = true;
mini-indentscope = {
enable = true;
@@ -171,29 +209,82 @@
};
};
};
trouble.enable = true;
lsp-lines.enable = true;
trouble = {
enable = true;
settings = {
auto_close = true;
use_diagnostic_signs = true;
};
};
cmp = {
enable = true;
autoEnableSources = true;
settings = {
cmdline = {
":" = {
mapping.__raw = "cmp.mapping.preset.cmdline()";
sources = [
{ name = "nvim_lsp"; }
{ name = "path"; }
{ name = "cmdline"; }
];
};
"/" = {
mapping.__raw = "cmp.mapping.preset.cmdline()";
sources = [
{ name = "buffer"; }
];
};
};
settings = {
snippet.expand.__raw = "function(args) require('luasnip').lsp_expand(args.body) end";
sources = [
{
name = "nvim_lsp";
priority = 100;
}
{
name = "nvim_lsp_signature_help";
priority = 90;
}
{
name = "luasnip";
priority = 75;
}
{
name = "buffer";
priority = 50;
}
{
name = "path";
priority = 40;
}
];
mapping = {
"<C-Space>" = "cmp.mapping.complete()";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
"<S-Tab>" =
"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(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;
tiny-inline-diagnostic.enable = true;
# tiny-code-action.enable = true;
# persisted.enable = true;
auto-session = {
enable = false;
@@ -208,6 +299,9 @@
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
css
html
javascript
json
lua
make
@@ -216,6 +310,8 @@
nix
regex
toml
tsx
typescript
vim
vimdoc
xml
@@ -224,15 +320,13 @@
];
settings = {
highlight.enable = true;
indent.enable = false;
};
};
};
extraPlugins = with pkgs; [
# vimPlugins.mini-completion
vimPlugins.mini-comment
vimPlugins.melange-nvim
vimPlugins.telescope-file-browser-nvim
vimPlugins.lsp-progress-nvim
vimPlugins.cmp-nvim-lsp-signature-help
tiny-code-action
];
opts = {
number = true;
@@ -240,10 +334,25 @@
tabstop = 2;
shiftwidth = 2;
termguicolors = true;
completeopt = "menu,menuone,noselect";
};
globals = {
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 = [
{
action = "<cmd>Telescope persisted<cr>";
@@ -292,6 +401,111 @@
key = "<leader>fd";
options = {
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";
};
}
];
+26 -7
View File
@@ -1,4 +1,8 @@
{ den, modules, ... }:
{
den,
modules,
...
}:
{
modules.obs = settings: {
homeManager =
@@ -12,14 +16,29 @@
programs = {
obs-studio = {
enable = true;
package = (
pkgs.obs-studio.override {
cudaSupport = true;
}
);
# package = (
# (pkgs.obs-studio.overrideAttrs (old: {
# version = "32.2.0-beta2-unstable";
# 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; [
obs-pipewire-audio-capture
obs-vkcapture
obs-gstreamer
];
};
};
@@ -63,7 +82,7 @@
lib.mergeAttrsList [ audio-set ];
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..
systemd.services.scx.environment = {
SCX_SCHEDULER_OVERRIDE = "scx_lavd";
SCX_FLAGS_OVERRIDE = "--powersave --cpu-pref-order=0-4,5-11";
SCX_FLAGS_OVERRIDE = "--powersave --no-core-compaction";
};
};
};
@@ -1 +1 @@
/run/user/1000/quickshell/vfs/6e389f6b800776b0595d9d90e42ebd04/.qmlls.ini
/run/user/1000/quickshell/vfs/ca6d8e2cdd46bffdf799708f31d409fa/.qmlls.ini
+20 -4
View File
@@ -22,15 +22,31 @@ Rectangle {
id: content
height: 20
anchors.centerIn: parent
spacing: 4
Rectangle {
implicitWidth: 24
implicitHeight: 20
color: "transparent"
Text {
id: speaker
text: root.defaultSpeaker.audio.muted ? "muted" : "unmuted"
anchors.centerIn: parent
text: root.defaultSpeaker.audio.muted ? "󰖁" : "󰕾"
font.family: "CaskaydiaCove NF"
font.pixelSize: 20
color: Colors.textPrimary
}
}
Rectangle {
implicitWidth: 24
implicitHeight: 20
color: "transparent"
radius: 3
Text {
id: mic
text: root.defaultMic.audio.muted ? "muted" : "unmuted"
anchors.centerIn: parent
text: root.defaultMic.audio.muted ? "" : ""
font.family: "CaskaydiaCove NFM"
font.pixelSize: 30
color: Colors.textPrimary
}
}
}
}
+8 -13
View File
@@ -7,33 +7,28 @@
}:
{
flake-file.inputs = {
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
raspberry-pi-nix.url = "github:cmyk/raspberry-pi-nix";
nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
};
modules.raspberry-pi = {
provides = {
"5" = {
nixos =
{ pkgs, ... }:
let
rpi-pi = inputs.raspberry-pi-nix;
in
{
imports = [
rpi-pi.nixosModules.raspberry-pi
rpi-pi.nixosModules.sd-image
inputs.nixos-hardware.nixosModules.raspberry-pi-5
];
boot.kernelPackages = pkgs.linuxPackages;
boot.kernel.sysctl."vm.mmap_rnd_bits" = pkgs.lib.mkForce 16;
environment.systemPackages = with pkgs; [
libraspberrypi
];
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;
boot.supportedFilesystems.zfs = false;
};
};
};
+18 -17
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]
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]
scug-io-ai-key: ENC[AES256_GCM,data:b2AT2+A5eoGa1eZsCYKDFg449sOgffDcQA==,iv:NDIS3x1unq6/UtjtsyBTHx5v12utagDA3BbNzs5v3L0=,tag:MhbJGATIDWyOZUqXqRAeVA==,type:str]
sops:
age:
- recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
enc: |
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZC9ZVlY2T0tXdy90b2hV
dDUxUjNyMjllQStaa0tKRy9YVkNIdFJyWTI4CitYNnhxN3JHQ3lsWXp2Tmgwek9n
@@ -14,8 +14,8 @@ sops:
MkVQY3h2OGhGaGNnYkVJUU1kK3F3VWMKs9B74KovGxx8KL5q/lGA/imVRM/i3mo/
a6Rbxufscp3WWGMbo70w8tWuRsAnIpUGh3EvWCekZ9nOzeMiVA8I2Q==
-----END AGE ENCRYPTED FILE-----
- recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
enc: |
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0dXJzYndvSC92aElvTVpz
SUtTOWFzcUJxOHVrTk5scm5tcGkzRmEvK1hVClNVbmp3ZjBRTW5ZNXVNNGh3dSti
@@ -23,8 +23,8 @@ sops:
Tk5Zd0h3OHRpQzZjazJKUStPUVdERzQKGnoKYKq7pPJUrcAWJ4/tm8mSxuthjssz
7IsjH4t6VCyug2c7XnLJpcE64yPD+GrXHYixP0r2qj80WMjpv7N7qA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
enc: |
recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLbGQ3MkVCUldqa3dYRTg0
NjVoUDdIc0RvSU02R0o0ZVk4KzVQMkZmeXpjClJaUUU3WTJVQmJkRzV4UTc3bXFI
@@ -32,8 +32,8 @@ sops:
QzhtM3V3VGFzdk9UenV6akxGNDh5d3cKdIKNPvM0GRJamiS4AXRNU+TbuZUnM6K7
FtC1dmHlyU/tXlFHv6TNlMZQtDgIVnE72Jvk48maq3oKiJAXWk11fg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
enc: |
recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoOHlRcnRwWUYwUGRSVW9s
cmdDZjN1RGFRVWtlODBudGpaemd3UDBZcnhRCksyWlk3VW91a3pnOGNQQVppM09z
@@ -41,8 +41,8 @@ sops:
bWFTMlhCL2IrZjlEOUFydmE4cHBzSmMKhIk8TZtRsIFKzopZCyp27SWYeHmf6jKn
VoIXQ6/VRRQjCYBsseZE5N+ycnr4ZC/RpXJ577G4TfGMCcixX67AfA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
enc: |
recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTG9LKzVvUjZEZ1lkMVJN
eldHSkRXQ241bnZmbHBmSXFNMU1seGcyaVNRCjNPaS9ITEJtdGRwOENDRytEMFk1
@@ -50,8 +50,8 @@ sops:
WTR2RU9GUVdsZHdleW1Gd2lyRENzSm8KznMUQ6Ah8O03AzZcCXgUIjjrV1cdkAnq
Pbr2BwdLzJvlF5lzmymIZEt35euv/HzhJGWDLWGpYJmYj/N8qZgBuA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
enc: |
recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxSDNMRlNaMXB2ZXBPTlNu
eG5BWE5xRTNnVUFtN2psUFVHejZVbFVCQTBFCkRXQitoL0VJaXZmMlI3Q0JHVWk1
@@ -59,8 +59,8 @@ sops:
Q0x4bDFBTzV2L0E3UXQxMUdubVJZRTgKcPQZ9zHQAFwP/Odnh5INleUsHSN06U+x
X98535uapyJR/Wswxj6ukdciMOou8cLfOInLwJgWOf6mZklEhecVXA==
-----END AGE ENCRYPTED FILE-----
- recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
enc: |
recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTaE1mUUlyVUxKQmhPMnlT
eS81cE5TeE1WWFVIRkdWT3c0ckhNMnFYZGxrCnp4My9nK20zcGVxUFZ0cnVVTDBS
@@ -68,7 +68,8 @@ sops:
bzJvaUg2VkFrazBoWmlIY2hKeUdhTjQKbgW+ysm3TWBKfVoKAeqvaPio29SyzjJP
61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-02-14T00:08:39Z"
mac: ENC[AES256_GCM,data:lp9ZeDxt5gkOkDmYk+F0VQrVhkR0tQiQlYXbygoA8Dcq+gV0IIKKLwRqr5CVfgfRlo3239IwmKLsGaS6zYC1xX4toZ8oqw3Ic2UvP2CiWt6M7HTrlL+3Y2+PKOUvGl7RAqQxQAw7QaoxB4esqdIiWnMDueVHk5BTKrkay+afhno=,iv:NAMaZ9SMBAtROTBSQtU0RJDB60MAuE82AFoPtDqVHVM=,tag:RGBUTQC1pM+LcBweSJbc6w==,type:str]
recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
lastmodified: "2026-07-22T22:45:05Z"
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
version: 3.11.0
version: 3.13.2
+2 -1
View File
@@ -15,7 +15,8 @@
inputs.sops-nix.homeManagerModules.sops
];
sops = {
age.keyFile = "/home/doloro/.config/sops/age/key.txt"; # must have no password!
age.keyFile = "/home/doloro/.config/sops/age/keys.txt"; # must have no password!
# I HATE YOU
defaultSopsFile = ./content/secrets.yaml;
};
};
+5 -5
View File
@@ -3,17 +3,17 @@
__findFile,
modules,
...
}:
{
}: {
# Basic caddy
modules.services.provides.caddy = {
nixos =
{ config, ... }:
{
nixos = {config, ...}: {
services.caddy = {
enable = true;
email = "doloroo@proton.me";
enableReload = true;
globalConfig = ''
acme_ca https://acme-v02.api.letsencrypt.org/directory
'';
};
};
};
+16 -8
View File
@@ -3,13 +3,14 @@
__findFile,
modules,
...
}:
{
}: {
# Basic traefik
modules.services.provides.ddns = {
nixos =
{ config, pkgs, ... }:
let
nixos = {
config,
pkgs,
...
}: let
ddnsImg = pkgs.dockerTools.pullImage {
imageName = "qmcgaw/ddns-updater";
imageDigest = "sha256:ee16ab4f6203bf9e5b0925d38a0b4ebf2d9f23771f933cfb2f5a2dbd5f9a2f88";
@@ -18,8 +19,7 @@
sha256 = "sha256-dMCHkvoFaORmGwbIM9io4Vc9fq+wBks25k2dmnW7naI=";
arch = "arm64";
};
in
{
in {
virtualisation.oci-containers.containers = {
ddns = {
image = "qmcgaw/ddns-updater";
@@ -28,10 +28,18 @@
"/data/ddns:/updater/data"
"/etc/localtime:/etc/localtime:ro"
];
# ports = [ "0.0.0.0:8123:8123" ];
ports = ["0.0.0.0:8125:8000"];
# 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
@@ -0,0 +1,49 @@
{
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
@@ -0,0 +1,105 @@
{
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 = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
settings = {
"*" = {
addKeysToAgent = "yes";
identityFile = [
AddKeysToAgent = "yes";
IdentityFile = [
"~/.ssh/id_ed25519"
"~/.ssh/id_gitea_scug"
];
+4 -9
View File
@@ -3,8 +3,7 @@
modules,
inputs,
...
}:
{
}: {
flake-file.inputs = {
stylix = {
url = "github:nix-community/stylix";
@@ -12,11 +11,9 @@
};
};
modules.stylix = {
homeManager =
{ pkgs, ... }:
{
homeManager = {pkgs, ...}: {
imports = [inputs.stylix.homeModules.stylix];
gtk.gtk4.theme = null;
# gtk.gtk4.theme = null;
stylix = {
enable = true;
autoEnable = false;
@@ -32,9 +29,7 @@
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
};
};
nixos =
{ pkgs, ... }:
{
nixos = {pkgs, ...}: {
imports = [inputs.stylix.nixosModules.stylix];
stylix.enable = false;
stylix.autoEnable = false;
+1 -1
View File
@@ -6,7 +6,7 @@
}:
{
flake-file.inputs = {
x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
x1e-kernel.url = "git+https://git.scug.io/nikkuss/x1e-nixos.git";
};
modules.surface-patches = {
nixos =
+9 -3
View File
@@ -2,7 +2,11 @@
{
modules.tmux = {
homeManager =
{ home, pkgs, ... }:
{
home,
pkgs,
...
}:
{
programs.tmux = {
enable = true;
@@ -11,10 +15,12 @@
minimal-tmux-status
];
extraConfig = ''
set-option -g default-terminal "xterm-256color"
set -a terminal-features "xterm-256color:RGB"
set-option -g default-terminal "tmux-256color"
set -as terminal-features ",xterm-256color:RGB"
set -g status-bg black
set -g status-fg white
set -g mouse on
set -g extended-keys on
'';
};
};
+1 -1
View File
@@ -8,7 +8,7 @@
enable = true;
settings = {
default_session = {
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";
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";
user = "greeter";
};
};
+11
View File
@@ -0,0 +1,11 @@
{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,6 +7,7 @@
users.users.${user.userName} = {
extraGroups = [
"wheel"
"libvirtd"
"networkmanager"
];
};
+15
View File
@@ -0,0 +1,15 @@
{
modules,
den,
inputs,
...
}: {
flake-file.inputs = {
nixos-wsl.url = "github:nix-community/NixOS-WSL";
};
modules.wsl = {
nixos = {
imports = [inputs.nixos-wsl.nixosModules.default];
};
};
}
Generated
+634 -305
View File
File diff suppressed because it is too large Load Diff
+12 -4
View File
@@ -4,6 +4,7 @@
inputs = {
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
direnv-instant.url = "github:Mic92/direnv-instant";
disko.url = "github:nix-community/disko";
flake-file.url = "github:vic/flake-file";
flake-parts = {
@@ -20,9 +21,10 @@
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland.url = "github:hyprwm/Hyprland";
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
import-tree.url = "github:vic/import-tree";
nik-pkgs = {
url = "git+https://git.scug.io/nikkuss/pkgs.git";
url = "git+https://git.scug.io/nikkuss/pkgs.git?ref=main";
inputs.nixpkgs.follows = "nixpkgs";
};
niri-flake = {
@@ -30,9 +32,15 @@
inputs.nixpkgs.follows = "nixpkgs";
};
nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release";
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
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";
raspberry-pi-nix.url = "github:nix-community/raspberry-pi-nix";
omp-nix.url = "git+https://git.molez.org/mandlm/omp-nix?ref=main";
raspberry-pi-nix.url = "github:cmyk/raspberry-pi-nix";
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
@@ -42,7 +50,7 @@
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
x1e-kernel.url = "git+https://git.scug.io/doloro/x1e-nixos.git?ref=bump-7.1-rc1";
x1e-kernel.url = "git+https://git.scug.io/nikkuss/x1e-nixos.git";
zen-browser = {
url = "github:youwen5/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";