diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..f97af76 --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,19 @@ +# This example uses YAML anchors which allows reuse of multiple keys +# without having to repeat yourself. +# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml +# for a more complex example. +keys: + - &admin_sckova 7622FD7E6AB9F1E9D2CEFE2700F325187C68651A + - &user_sckova age1k9zp37p9sejvpvwu688t7jkl8utkugrsch7a9ahufpq7uhj609gqsd3wka + - &host_peach age1dx9rwrkhqj8sfr8vdfsgrqjwqefzmgtugsp6ykklpudfw4hcnuyqx9x20e + - &host_alien age1ygykyl3xyfhkt0x46frqnef4f39w0cnu6d98nf0efl43f706uqtsnsx5nd + +creation_rules: + - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ + key_groups: + - pgp: + - *admin_sckova + age: + - *user_sckova + - *host_peach + - *host_alien diff --git a/README.md b/README.md deleted file mode 100644 index 554d992..0000000 --- a/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# NixOS Configuration - -This repository contains the personal **NixOS** and **Home Manager** configuration for **Sean Kovacs** (`sckova`). It utilizes **Nix Flakes** to manage reproducible system states across disparate hardware architectures, specifically targeting high-performance x86_64 gaming desktops and Apple Silicon laptops. - -## 🖥️ Hosts - -The configuration defines three distinct system profiles via `flake.nix`: - -### 👽 `alien` (x86_64-linux) - -The primary high-performance desktop and gaming workstation. - -* **Kernel:** Uses the **CachyOS** kernel (`linux-cachyos-lts`) via `nix-cachyos-kernel` overlay for scheduler and performance optimizations. -* **Graphics:** Nvidia proprietary drivers (Stable) with Open kernel modules disabled. -#### Gaming Stack: -* **Steam**: Enabled with Gamescope session and Proton-GE. -* **Optimization**: `ananicy-cpp` enabled with specific rules for Gamescope (nice -20). -* **Streaming**: Sunshine game streaming service enabled and auto-started. -* **RGB**: OpenRGB and `ddcutil` for hardware lighting and display control. - -* **Virtualization:** Podman (Docker compatible) and Hyper-V guest support enabled. -* **Hardware:** Specific monitor configuration defined in Niri settings (Dual 4K @ 144Hz + Portrait 1440p). - -### 🍑 `peach` (aarch64-linux) - -A configuration tailored for Apple Silicon hardware using **Asahi Linux**. - -#### **System-specific setup**: -* GPU-accelerated desktop via Apple Silicon drivers. -* Touchpad configuration with natural scrolling. -* Specific notch handling and boot logo customization with plymouth & m1n1. -* Configures docker in a rootless setup. - -* **Kernel**: Patched `linuxPackages_asahi` with Apple Mailbox and RTKit support. - -### 💻 `vm-generic` - -A generic template for virtual machines, supported on both `x86_64-linux` and `aarch64-linux`. - -## 🎨 Desktop Environment - -The system uses a highly customized Wayland environment centered around **Niri**. - -### Window Manager: **Niri** - -#### Type: -* Scrollable-tiling Wayland compositor. -#### Style: -* Tightly separated windows with 2px borders and 4px gaps. -* Animations and window rounding (8px radius). -#### **Input**: -* Focus follows mouse -* Adaptive acceleration -* Natural scrolling enabled -#### **Keybinds**: -* Super+Shift+? preserved for showing the custom keybinds. - -### Shell & Widgets: **Noctalia** - -* **Bar**: Custom top bar with workspaces, system monitor, media controls, and tray. -* **Notifications**: Integrated notification daemon with "Do Not Disturb" capabilities. -* **Control Center**: Quick access to network, bluetooth, and power profiles. -* **Launcher**: Fuzzel app launcher with clipboard history support. - -### Theming: **Base16/24** - -A centralized theme configuration module propagates and builds colors across the system's applications and toolkits. - -#### Scheme: -* Can use any scheme declared in the [tinted-gallery](https://tinted-theming.github.io/tinted-gallery/). -#### Accent: -* Orange for peach -* Blue for alien -* Green for the VM -#### Cursor: -* Catppuccin Mocha Peach (Size 24). -#### Fonts: -* Sans: Noto Sans -* Serif: Noto Serif -* Mono: FiraMono Nerd Font - -## 📦 Software Stack - -### Terminal & Editors - -#### **Terminal**: **Kitty** -* Fish shell integration -* Scrollback buffering -* Custom theme -* Wayland-specific integrations -#### **Shell**: **Fish** -* Customized prompt -* Modern alternatives to ls `eza`, cat `bat`, and gzip `pigz`. -* `btop` is used as a system monitor. -#### **Editor**: **Neovim** (via `nixvim`) configured with: -* LSP support (`nixd`, `qmlls`). -* `conform-nvim` for formatting (Prettier, Stylua, Black). -* `cmp` for autocompletion. -* `fzf-lua` for fuzzy finding. - -### Applications - -#### Browser: **Firefox** with extensive hardening -* Telemetry, Pocket, and AI features disabled. -* Custom userChrome theme. -* Vertical tabs enabled. -* Extensions managed via Nix (uBlock Origin, SponsorBlock, Bitwarden, etc.). -* PWA support via `firefoxpwa`. -* SearXNG metasearch engine set up and enabled as the default search engine and homepage. - -#### Social -* **Vesktop**: Discord client. -* Dynamically generated base16 theme. -* Numerous plugins (MessageLogger, FakeNitro, etc.) enabled. -* **Fractal**: Matrix client. -* **Tuba**: Mastodon client. - -#### Media -* **MPV** with `uosc` UI and `mpris` support. -* **Spotify**: Custom `riff` package (Rust-based client) and `spotify-webapp`. -* **Spicetify**: CLI Spotify client theming. -* **Strawberry**: Music client. -* **Audacity**, **Musescore**: Musical workstations. - -### Services - -* **Wallpaper**: Automated daily **Bing Wallpaper** downloader service. -* **Storage**: **Synology NAS** mounting via Rclone systemd service. -* **Network**: **Tailscale** mesh networking. - -## 🛠️ Usage - -### Rebuilding the System - -To apply the configuration for a specific host: - -```bash -# Rebuild NixOS configuration and switch -sudo nixos-rebuild switch --flake .#systemName - -# Rebuild NixOS configuration for next boot -sudo nixos-rebuild boot --flake .#systemName --install-bootloader -``` - -### VM Testing - -To build and run the generic VM: - -```bash -nixos-rebuild build-vm --flake .#vm-generic -./result/bin/run-vm-generic-vm -``` diff --git a/flake.lock b/flake.lock index c059b64..01a13aa 100644 --- a/flake.lock +++ b/flake.lock @@ -1,37 +1,16 @@ { "nodes": { - "aerothemeplasma-nix": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1771513958, - "narHash": "sha256-KoDcVuYgmP/kX6pd9uCW5Wo5Xn3y0SumrMaCLu5ojdY=", - "owner": "nyakase", - "repo": "aerothemeplasma-nix", - "rev": "348cbf661738840d0ae02d5eda7f4c076e59b733", - "type": "github" - }, - "original": { - "owner": "nyakase", - "repo": "aerothemeplasma-nix", - "type": "github" - } - }, "apple-silicon": { "inputs": { "flake-compat": "flake-compat", "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1771511514, - "narHash": "sha256-qhtonMK07BCVC/wZ+pZ9/MKhcTric7YUaCpW6pOg8IM=", + "lastModified": 1774264319, + "narHash": "sha256-aAsO35YtqIdvBhCIKZ0a+OcC8wB0H1+mAoPKBY0jxeQ=", "owner": "nix-community", "repo": "nixos-apple-silicon", - "rev": "2b92d495204be0b10845c66361444dbc8441c68d", + "rev": "9fe29a63b23005acfcd1324a9e78b6241226cdb1", "type": "github" }, "original": { @@ -58,30 +37,14 @@ "type": "github" } }, - "base16-discord": { - "flake": false, - "locked": { - "lastModified": 1771164756, - "narHash": "sha256-6NU5HQZVZ1mSNaIyZxE+U35nF46uXH/768y3auhQdiI=", - "owner": "imbypass", - "repo": "base16-discord", - "rev": "8b005607e5783f751fe369f0442965a86eed8051", - "type": "github" - }, - "original": { - "owner": "imbypass", - "repo": "base16-discord", - "type": "github" - } - }, "cachyos-kernel": { "flake": false, "locked": { - "lastModified": 1771263855, - "narHash": "sha256-akyds1g8cb742d2OrnQ4YciscpynsQ0+0YD2a8aZdvo=", + "lastModified": 1774160598, + "narHash": "sha256-ArPoVPHpXauFDGsz7nGBiXljj7keGcp/O4Pf4ZU4/30=", "owner": "CachyOS", "repo": "linux-cachyos", - "rev": "5ece16c7b4a7d1261da68153cafc318a60b78ce8", + "rev": "1caa0b77871d4537f0d629a2ce30edb2f6178d19", "type": "github" }, "original": { @@ -93,11 +56,11 @@ "cachyos-kernel-patches": { "flake": false, "locked": { - "lastModified": 1771399550, - "narHash": "sha256-Q2rMJcwZiI1rn8H27gLleKA3ATW/EykukyGR6S1tBPk=", + "lastModified": 1774023710, + "narHash": "sha256-Oc+4K6edCv0fdvfe6UW+OpJiXYWkXRrOH9TDMNwi+J8=", "owner": "CachyOS", "repo": "kernel-patches", - "rev": "021aae790c8555a4bb6e2135c6b777bf6fdcba02", + "rev": "a4e26fa95257ac09bd42930334399b0eabd5b5b1", "type": "github" }, "original": { @@ -106,22 +69,6 @@ "type": "github" } }, - "catppuccin-discord": { - "flake": false, - "locked": { - "lastModified": 1770426312, - "narHash": "sha256-rxvHIifq5CYIBPwFA2SpOrWT+sG/z0ItXT3sx2wbEqg=", - "owner": "catppuccin", - "repo": "discord", - "rev": "b9b5547f0b32296d2389716ef606de87b3c1e7c7", - "type": "github" - }, - "original": { - "owner": "catppuccin", - "repo": "discord", - "type": "github" - } - }, "flake-compat": { "locked": { "lastModified": 1761640442, @@ -158,11 +105,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -172,24 +119,6 @@ } }, "flake-parts_2": { - "inputs": { - "nixpkgs-lib": "nixpkgs-lib_2" - }, - "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "nixvim", @@ -210,7 +139,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "nur", @@ -231,6 +160,24 @@ "type": "github" } }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "fromYaml": { "flake": false, "locked": { @@ -254,11 +201,11 @@ ] }, "locked": { - "lastModified": 1771519029, - "narHash": "sha256-H59Qf82wv5kBXVoyXsmUKW+9J3o8FqgY4uKaLdsLdLg=", + "lastModified": 1774539458, + "narHash": "sha256-H9GIOqdMfQZ6lFetsQhO9TCq53hYzpTHDWOt3PRh9V0=", "owner": "nix-community", "repo": "home-manager", - "rev": "167e0b6837115e672ec5f58e2b0ea39093abe807", + "rev": "e2e5f512b33ed19a7a3271d0b73ed5eefcc0be5f", "type": "github" }, "original": { @@ -267,28 +214,14 @@ "type": "github" } }, - "kvlibadwaita": { - "flake": false, - "locked": { - "lastModified": 1757782301, - "narHash": "sha256-jCXME6mpqqWd7gWReT04a//2O83VQcOaqIIXa+Frntc=", - "owner": "GabePoel", - "repo": "KvLibadwaita", - "rev": "1f4e0bec44b13dabfa1fe4047aa8eeaccf2f3557", - "type": "github" - }, - "original": { - "owner": "GabePoel", - "repo": "KvLibadwaita", - "type": "github" - } - }, "niri": { "inputs": { "niri-stable": "niri-stable", - "niri-unstable": "niri-unstable", + "niri-unstable": [ + "niri-blur" + ], "nixpkgs": [ - "nixpkgs" + "nixpkgs-unstable" ], "nixpkgs-stable": [ "nixpkgs-stable" @@ -297,19 +230,37 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1771514840, - "narHash": "sha256-t3WbZvwoDj/75YDX/nwkZuxanZLZaWr9meSfKswaN6g=", - "owner": "sodiboo", + "lastModified": 1771682768, + "narHash": "sha256-RJ9RVJSAktCgWiqLDCjYmx9KgMuLaszUrI28k92Pa2I=", + "owner": "sckova", "repo": "niri-flake", - "rev": "4f69ab280e9bb34e2c0b67fdfa6f0978a170ef56", + "rev": "383bd9d32706b163807b05983418069b2e692310", "type": "github" }, "original": { - "owner": "sodiboo", + "owner": "sckova", + "ref": "feat/blur", "repo": "niri-flake", "type": "github" } }, + "niri-blur": { + "flake": false, + "locked": { + "lastModified": 1774190104, + "narHash": "sha256-L/Ldq9G41Mj8WjWTuC+rePvWIx1A/tHdFpLbQmtrMSA=", + "owner": "niri-wm", + "repo": "niri", + "rev": "d06dd4b9e60fa07120c217aa095f3ed8caac99f2", + "type": "github" + }, + "original": { + "owner": "niri-wm", + "ref": "wip/branch", + "repo": "niri", + "type": "github" + } + }, "niri-stable": { "flake": false, "locked": { @@ -327,36 +278,20 @@ "type": "github" } }, - "niri-unstable": { - "flake": false, - "locked": { - "lastModified": 1771305475, - "narHash": "sha256-lqweVTwHhYc+9T33cysp38gVwxaibGJHriOPZXWyhCY=", - "owner": "YaLTeR", - "repo": "niri", - "rev": "a2a52911757cb3b497db9407592f9b4c439571ea", - "type": "github" - }, - "original": { - "owner": "YaLTeR", - "repo": "niri", - "type": "github" - } - }, "nix-cachyos-kernel": { "inputs": { "cachyos-kernel": "cachyos-kernel", "cachyos-kernel-patches": "cachyos-kernel-patches", "flake-compat": "flake-compat_2", - "flake-parts": "flake-parts_2", + "flake-parts": "flake-parts", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1771438239, - "narHash": "sha256-/d5FnrQ1nvZ9n1I7o/hMTzjd8tTBvV5rT24Nh7h59RQ=", + "lastModified": 1774290535, + "narHash": "sha256-dnFbucSiAjjWmPENgyIiK/ocCuYSp4sM6Sq4WCVjG+8=", "owner": "xddxdd", "repo": "nix-cachyos-kernel", - "rev": "58f338b00bc5619144a6f3082eed5c83e79b279b", + "rev": "c0fcdf5cab21b7e3157e84046b57407a60934415", "type": "github" }, "original": { @@ -368,11 +303,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1768305791, - "narHash": "sha256-AIdl6WAn9aymeaH/NvBj0H9qM+XuAuYbGMZaP0zcXAQ=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1412caf7bf9e660f2f962917c14b1ea1c3bc695e", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -384,11 +319,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1765674936, - "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", + "lastModified": 1772328832, + "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", + "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", "type": "github" }, "original": { @@ -414,11 +349,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1771419570, - "narHash": "sha256-bxAlQgre3pcQcaRUm/8A0v/X8d2nhfraWSFqVmMcBcU=", + "lastModified": 1774388614, + "narHash": "sha256-tFwzTI0DdDzovdE9+Ras6CUss0yn8P9XV4Ja6RjA+nU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6d41bc27aaf7b6a3ba6b169db3bd5d6159cfaa47", + "rev": "1073dad219cb244572b74da2b20c7fe39cb3fa9e", "type": "github" }, "original": { @@ -430,11 +365,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1771369470, - "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", + "lastModified": 1774386573, + "narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0182a361324364ae3f436a63005877674cf45efb", + "rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", "type": "github" }, "original": { @@ -446,11 +381,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1771353015, - "narHash": "sha256-gvMwFEdFCM2zFxLVDaAbhV2N9zK0IW/RceBundHUdZs=", + "lastModified": 1774235121, + "narHash": "sha256-CzpSER+YKq4yD+RPom6Su9c/4FutF+sD4rEnls+4MyM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "931ef4db402cdab9dfe66fe4a2b01d50f6fe435d", + "rev": "1116aed2cee959f7d054a462458513ad323b710a", "type": "github" }, "original": { @@ -460,20 +395,36 @@ "type": "github" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1770115704, + "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixvim": { "inputs": { - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "nixpkgs": [ "nixpkgs" ], "systems": "systems" }, "locked": { - "lastModified": 1771135771, - "narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=", + "lastModified": 1774309640, + "narHash": "sha256-8oWL7YLwElBY9ebYri1LlSlhf/gd1Qoqj0nbBwG2yso=", "owner": "nix-community", "repo": "nixvim", - "rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba", + "rev": "28c58bf023bf537354f78d6e496a349d7a0ed554", "type": "github" }, "original": { @@ -486,14 +437,15 @@ "inputs": { "nixpkgs": [ "nixpkgs" - ] + ], + "noctalia-qs": "noctalia-qs" }, "locked": { - "lastModified": 1771513929, - "narHash": "sha256-dPeHevAT1Cb2w/Wrfz/d5i6RfO8bvbGl/KrTPxU2l3w=", + "lastModified": 1774536980, + "narHash": "sha256-j7I4XVEaUsiR0EOUJGnY7DZ0V/GYtcGJ97K3abzU9QY=", "owner": "noctalia-dev", "repo": "noctalia-shell", - "rev": "9c47ce03f200e0b8fc515d973440d5bc3e359785", + "rev": "396fba755b515913f4ac7596c30b827b0f67d53a", "type": "github" }, "original": { @@ -502,19 +454,42 @@ "type": "github" } }, + "noctalia-qs": { + "inputs": { + "nixpkgs": [ + "noctalia", + "nixpkgs" + ], + "systems": "systems_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1774351986, + "narHash": "sha256-N131zILQ06ZNEvtgtjjFZ0N5qEI70rKKhCZsBcZoDH8=", + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "rev": "066835ebd5daeabc86df1e62fb5fe82a51407cc0", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia-qs", + "type": "github" + } + }, "nur": { "inputs": { - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_3", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1771516225, - "narHash": "sha256-G2cPs4Ic8Z1Aq8QfMa1VwJoBwIhVpwzcQ036ZhI4oXc=", + "lastModified": 1774540439, + "narHash": "sha256-zVYoM58GjEh07Oa56zRygHaqp+Fm83PK8C77p84l5uA=", "owner": "nix-community", "repo": "NUR", - "rev": "d4694f0614419034910767b5a036384ab358b138", + "rev": "95ed6efd2ba5aefb62f522c71ef3276b18a8b5a0", "type": "github" }, "original": { @@ -535,44 +510,18 @@ }, "original": { "owner": "OpenMW", + "ref": "01bcd6", "repo": "openmw", - "rev": "01bcd6a6369fe461caaf900354967b4751aede7a", "type": "gitlab" } }, - "plasma-manager": { - "inputs": { - "home-manager": [ - "home-manager" - ], - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1770766818, - "narHash": "sha256-12RCFLyAedyMOdenUi7cN3ioJPEGjA/ZG1BLjugfUVs=", - "owner": "nix-community", - "repo": "plasma-manager", - "rev": "44b928068359b7d2310a34de39555c63c93a2c90", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "plasma-manager", - "type": "github" - } - }, "root": { "inputs": { - "aerothemeplasma-nix": "aerothemeplasma-nix", "apple-silicon": "apple-silicon", "base16": "base16", - "base16-discord": "base16-discord", - "catppuccin-discord": "catppuccin-discord", "home-manager": "home-manager", - "kvlibadwaita": "kvlibadwaita", "niri": "niri", + "niri-blur": "niri-blur", "nix-cachyos-kernel": "nix-cachyos-kernel", "nixpkgs": [ "nixpkgs-unstable" @@ -583,29 +532,47 @@ "noctalia": "noctalia", "nur": "nur", "openmw": "openmw", - "plasma-manager": "plasma-manager", - "spicetify-nix": "spicetify-nix", + "seamless-asahi-plymouth": "seamless-asahi-plymouth", + "sops-nix": "sops-nix", "tt-schemes": "tt-schemes" } }, - "spicetify-nix": { + "seamless-asahi-plymouth": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems_2" + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1771268051, - "narHash": "sha256-nGqPcngnezoT+/xAvw3UDjwdKP2MC4fO315A/Otb9eE=", - "owner": "Gerg-L", - "repo": "spicetify-nix", - "rev": "b930de84c561f62a0c39a6a57c2ab553a97e8495", + "lastModified": 1770365598, + "narHash": "sha256-tjmDL8eaK2NIwWDho81GhygkBZoauiiiUqwV1VP1FwQ=", + "owner": "luca-schlecker", + "repo": "seamless-asahi-plymouth", + "rev": "e3f5517643f9c2021bee2870b55d8bd363763cd1", "type": "github" }, "original": { - "owner": "Gerg-L", - "repo": "spicetify-nix", + "owner": "luca-schlecker", + "repo": "seamless-asahi-plymouth", + "type": "github" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774910634, + "narHash": "sha256-B+rZDPyktGEjOMt8PcHKYmgmKoF+GaNAFJhguktXAo0=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "19bf3d8678fbbfbc173beaa0b5b37d37938db301", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "sops-nix", "type": "github" } }, @@ -626,16 +593,38 @@ }, "systems_2": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "noctalia", + "noctalia-qs", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772660329, + "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "3710e0e1218041bbad640352a0440114b1e10428", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 1585a9e..27635c3 100644 --- a/flake.nix +++ b/flake.nix @@ -8,23 +8,19 @@ # edit this to switch between stable and unstable nixpkgs.follows = "nixpkgs-unstable"; - nix-cachyos-kernel = { - url = "github:xddxdd/nix-cachyos-kernel/release"; - # inputs.nixpkgs.follows = "nixpkgs"; - }; - - base16 = { - url = "github:SenchoPens/base16.nix"; - }; + nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel/release"; + apple-silicon.url = "github:nix-community/nixos-apple-silicon"; + seamless-asahi-plymouth.url = "github:luca-schlecker/seamless-asahi-plymouth"; + base16.url = "github:SenchoPens/base16.nix"; tt-schemes = { url = "github:tinted-theming/schemes/b9f335ad6a0b7d85b9c2eb932c3215f7429f7d11"; flake = false; }; - base16-discord = { - url = "github:imbypass/base16-discord"; - flake = false; + sops-nix = { + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { @@ -32,40 +28,23 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - plasma-manager = { - url = "github:nix-community/plasma-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.home-manager.follows = "home-manager"; - }; - - aerothemeplasma-nix = { - url = "github:nyakase/aerothemeplasma-nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - niri = { - url = "github:sodiboo/niri-flake"; - inputs.nixpkgs.follows = "nixpkgs"; + url = "github:sckova/niri-flake/feat/blur"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; inputs.nixpkgs-stable.follows = "nixpkgs-stable"; - # inputs.niri-stable.follows = "niri-blur"; - # inputs.niri-unstable.follows = "niri-blur"; + inputs.niri-unstable.follows = "niri-blur"; }; - # niri-blur = { - # url = "github:visualglitch91/niri/feat/blur"; - # flake = false; - # }; + niri-blur = { + url = "github:niri-wm/niri/wip/branch"; + flake = false; + }; noctalia = { url = "github:noctalia-dev/noctalia-shell"; inputs.nixpkgs.follows = "nixpkgs"; }; - spicetify-nix = { - url = "github:Gerg-L/spicetify-nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; @@ -76,23 +55,8 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - apple-silicon = { - url = "github:nix-community/nixos-apple-silicon"; - # inputs.nixpkgs.follows = "nixpkgs"; - }; - openmw = { - url = "gitlab:OpenMW/openmw/01bcd6a6369fe461caaf900354967b4751aede7a"; - flake = false; - }; - - catppuccin-discord = { - url = "github:catppuccin/discord"; - flake = false; - }; - - kvlibadwaita = { - url = "github:GabePoel/KvLibadwaita"; + url = "gitlab:OpenMW/openmw/01bcd6"; flake = false; }; }; @@ -102,32 +66,20 @@ nixpkgs, nixpkgs-unstable, nix-cachyos-kernel, + apple-silicon, + seamless-asahi-plymouth, base16, tt-schemes, - base16-discord, + sops-nix, home-manager, - plasma-manager, - aerothemeplasma-nix, niri, noctalia, - spicetify-nix, nur, nixvim, - apple-silicon, openmw, - catppuccin-discord, - kvlibadwaita, ... }: let - # All systems we want to support for the generic VM - # to run the vm: - # nixos-rebuild build-vm --flake ~/nix#$(nix eval --raw --impure --expr 'builtins.currentSystem') - supportedSystems = [ - "x86_64-linux" - "aarch64-linux" - ]; - # Shared config for all package sets pkgConfig = { allowUnfree = true; @@ -151,86 +103,92 @@ } // extraSpecialArgs; modules = [ - { - nixpkgs = { - config = pkgConfig; - overlays = [ - niri.overlays.niri - noctalia.overlays.default - nur.overlays.default - (final: prev: { - openmw-git = openmw; - catppuccin-discord-git = catppuccin-discord; - kvlibadwaita-git = kvlibadwaita; - base16-discord-git = base16-discord; - }) - (import ./packages/overlay.nix) - ]; - }; - nix = { - settings = { - experimental-features = [ - "nix-command" - "flakes" + ( + { pkgs, ... }: + { + nixpkgs = { + config = pkgConfig; + overlays = [ + niri.overlays.niri + noctalia.overlays.default + nur.overlays.default + (final: prev: { + openmw-git = openmw; + }) + (final: prev: { + inherit (prev.lixPackageSets.stable) + nixpkgs-review + nix-eval-jobs + nix-fast-build + colmena + ; + }) + (import ./packages/overlay.nix) ]; + }; + nix = { + package = pkgs.lixPackageSets.stable.lix; + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; - substituters = [ - "https://attic.xuyh0120.win/lantian" - "https://cache.garnix.io" - "https://nixos-apple-silicon.cachix.org" - ]; + substituters = [ + "https://attic.xuyh0120.win/lantian" + "https://cache.garnix.io" + "https://nixos-apple-silicon.cachix.org" + ]; - trusted-public-keys = [ - "lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc=" - "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" - "nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20=" - ]; + trusted-public-keys = [ + "lantian:EeAUQ+W+6r7EtwnmYjeVwx5kOGEBpjlBfPlzGlTNvHc=" + "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + "nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20=" + ]; - trusted-users = [ - "root" - "sckova" - ]; + trusted-users = [ + "root" + "sckova" + ]; + }; - # Increase file descriptor limit for builds - # sandbox = "relaxed"; - # extra-sandbox-paths = [ ]; - # build-users-group = "nixbld"; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; }; - gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 30d"; + networking.hostName = hostname; + + users.users.sckova = { + isNormalUser = true; + description = "Sean Kovacs"; + extraGroups = [ + "wheel" + "networkmanager" + "podman" + "pipewire" + ]; + openssh.authorizedKeys.keys = [ + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCn/eXMq04vcXNqGVzlZOw2C2dQYBqzWsoigdFW09XqC2WPaGljbAIayzaD7Q1tIlPGGy10+nipAXAk1CHAnrQ2KSg4v/SwFphF48V3joeQmideC4vo0EIQEQibbMtj3oFezqRcRZINl/1hr4t0myZ3zkoTjh3HCkqJEMGUdArDMEVPA5mwcKSLsyshW9LMG/3C9YKKPU1/lVsoeDkj8AVZA0srhkApuRKF0IVu8KoPd6ldvSWgpQ1iuQ+MEMSeOUJytieBkzeY9zEVePaQ86oIMDUzqq8OTN37RyShiJKPskKyj12rJI2eFtI/viGaj8P6/yvKqMp3F4kAsPAuvMLLAIYCNa+139rDpkkIKB6lVtgq0jnJGRywaYXGIRyExNcVAr8I9wrNnNN2M4whVeYBxfLMzKZ+VvfK39AaGvnzPuFDLqUC87sN4c/1KZQo+TCtlaxcYvqowWylw5JHUt8uwFcO/dUebQxxAv8EdyPZGJ/54y19PsTbu9KyxSc2gIU= sckova" + ]; }; - }; - - networking.hostName = hostname; - - users.users.sckova = { - isNormalUser = true; - description = "Sean Kovacs"; - extraGroups = [ - "wheel" - "networkmanager" - "podman" - ]; - hashedPassword = "$6$bvwRUFaJNMpH8rm3$FGDWFN6tBScJ/2DynAjnlZE8JRfyADN78d6c4GawxpAjyNLNE/AjQzMA09tLRqpKX7WnN5PIUZLAm2bT9/RbG0"; - openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCn/eXMq04vcXNqGVzlZOw2C2dQYBqzWsoigdFW09XqC2WPaGljbAIayzaD7Q1tIlPGGy10+nipAXAk1CHAnrQ2KSg4v/SwFphF48V3joeQmideC4vo0EIQEQibbMtj3oFezqRcRZINl/1hr4t0myZ3zkoTjh3HCkqJEMGUdArDMEVPA5mwcKSLsyshW9LMG/3C9YKKPU1/lVsoeDkj8AVZA0srhkApuRKF0IVu8KoPd6ldvSWgpQ1iuQ+MEMSeOUJytieBkzeY9zEVePaQ86oIMDUzqq8OTN37RyShiJKPskKyj12rJI2eFtI/viGaj8P6/yvKqMp3F4kAsPAuvMLLAIYCNa+139rDpkkIKB6lVtgq0jnJGRywaYXGIRyExNcVAr8I9wrNnNN2M4whVeYBxfLMzKZ+VvfK39AaGvnzPuFDLqUC87sN4c/1KZQo+TCtlaxcYvqowWylw5JHUt8uwFcO/dUebQxxAv8EdyPZGJ/54y19PsTbu9KyxSc2gIU= sckova" - ]; - }; - } + } + ) + ./options.nix + ./sops.nix ./system ./system/searxng + ./system/games ./system/widevine ./system/shell/fish.nix ./system/tailscale ./system/hosts/${hostname} ./hardware/${hostname} - aerothemeplasma-nix.nixosModules.aerothemeplasma-nix niri.nixosModules.niri + sops-nix.nixosModules.sops home-manager.nixosModules.home-manager - noctalia.nixosModules.default { home-manager = { useGlobalPkgs = true; @@ -239,16 +197,18 @@ imports = [ ./home ./options.nix - ./home/apps - ./home/games - ./home/hosts/${hostname} - ./home/kde - ./home/services - ./home/terminal - ./home/tiling + ./sops.nix + ./home/sckova + ./home/sckova/apps + ./home/sckova/games + ./home/sckova/hosts/${hostname} + ./home/sckova/services + ./home/sckova/terminal + ./home/sckova/tiling ]; }; sharedModules = [ + sops-nix.homeManagerModules.sops base16.nixosModule ( { config, ... }: @@ -256,14 +216,10 @@ scheme = "${tt-schemes}/base24/${config.colors.scheme}.yaml"; } ) - aerothemeplasma-nix.homeModules.aerothemeplasma-nix - plasma-manager.homeModules.plasma-manager noctalia.homeModules.default - spicetify-nix.homeManagerModules.default nixvim.homeModules.nixvim ]; extraSpecialArgs = { - inherit spicetify-nix; pkgs-unstable = import nixpkgs-unstable { inherit system; config = pkgConfig; @@ -271,6 +227,7 @@ }; }; } + noctalia.nixosModules.default ] ++ extraModules; }; @@ -293,10 +250,9 @@ home.username = user; home.homeDirectory = "/home/${user}"; modules = [ - ./home - ./home/hosts/${hostname}.nix + ./home/${user} + ./home/${user}/hosts/${hostname}.nix home-manager.homeModules.home-manager - plasma-manager.homeModules.plasma-manager niri.homeModules.default noctalia.homeModules.noctalia nixvim.homeModules.nixvim @@ -308,27 +264,21 @@ peach = mkNixosSystem { hostname = "peach"; system = "aarch64-linux"; + extraSpecialArgs = { inherit seamless-asahi-plymouth; }; extraModules = [ apple-silicon.nixosModules.default { nixpkgs.overlays = [ apple-silicon.overlays.apple-silicon-overlay ]; } ]; }; - - alien = - mkNixosSystem { - hostname = "alien"; - system = "x86_64-linux"; - extraModules = [ - { nixpkgs.overlays = [ nix-cachyos-kernel.overlays.pinned ]; } - ]; - } - // nixpkgs.lib.genAttrs supportedSystems ( - system: - mkNixosSystem { - hostname = "vm-generic"; - inherit system; + alien = mkNixosSystem { + hostname = "alien"; + system = "x86_64-linux"; + extraModules = [ + { + nixpkgs.overlays = [ nix-cachyos-kernel.overlays.pinned ]; } - ); + ]; + }; }; homeConfigurations = { @@ -342,14 +292,6 @@ hostname = "alien"; system = "x86_64-linux"; }; - } - // nixpkgs.lib.genAttrs supportedSystems ( - system: - mkHomeConfig { - user = "sckova"; - hostname = "vm-generic"; - inherit system; - } - ); + }; }; } diff --git a/home/apps/default.nix b/home/apps/default.nix deleted file mode 100644 index 69a251c..0000000 --- a/home/apps/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./discord.nix - ./firefox.nix - ./mpv.nix - # ./vscode.nix - ]; -} diff --git a/home/default.nix b/home/default.nix index 53fa623..319b733 100755 --- a/home/default.nix +++ b/home/default.nix @@ -1,105 +1,14 @@ { - config, - pkgs, - pkgs-unstable, - ... -}: -{ + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + config.home.stateVersion = "25.05"; - config = { - home.packages = with pkgs; [ - # cli utilities - tmux - fastfetch - btop - wget - ripgrep - ncdu - fzf - wl-clipboard - rclone - waypipe - spotdl - browsh - mosh - gh - - # development & tooling - jdk21_headless - quickemu - nerd-fonts.noto - noto-fonts - noto-fonts-color-emoji - nix-prefetch - prowlarr - radarr - sonarr - flaresolverr - nerd-fonts.fira-mono - ffmpeg-full - - # kde and kde theming - # kde-rounded-corners - kdePackages.partitionmanager - pkgs.catppuccin-cursors.mochaPeach - - # gui applications - input-leap - libreoffice-qt-fresh - # nur.repos.forkprince.helium-nightly - chromium - qbittorrent - nautilus - fractal - tuba - - # gui applications ( multimedia ) - audacity - strawberry - musescore - gimp - calibre - # riff - dissent - loupe - spotify-player - - # overrides - # (chromium.override { - # enableWideVine = true; - # }) - ]; - - services = { - spotifyd = { - enable = true; - package = pkgs-unstable.spotifyd; - settings = { - global = { - device_type = "computer"; - dbus_type = "session"; - disable_discovery = true; - use_mpris = true; - bitrate = 320; - initial_volume = 100; - volume_normalisation = true; - normalisation_pregain = 0; - }; - }; - }; - }; - - # This value determines the Home Manager release that your - # configuration is compatible with. This helps avoid breakage - # when a new Home Manager release introduces backwards - # incompatible changes. - # - # You can update Home Manager without changing this value. See - # the Home Manager release notes for a list of state version - # changes in each release. - home.stateVersion = "25.05"; - - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - }; + # Let Home Manager install and manage itself. + config.programs.home-manager.enable = true; } diff --git a/home/games/default.nix b/home/games/default.nix deleted file mode 100644 index c7da03f..0000000 --- a/home/games/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./minecraft.nix - ./morrowind.nix - ]; -} diff --git a/home/hosts/alien/default.nix b/home/hosts/alien/default.nix deleted file mode 100644 index 513501e..0000000 --- a/home/hosts/alien/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ - config, - pkgs, - lib, - pkgs-unstable, - spicetify-nix, - ... -}: -{ - colors = { - scheme = "catppuccin-mocha"; - accent = "base0D"; - }; - - home.packages = with pkgs; [ - pkgs-unstable.ckan - - # steam gtk theming - adwsteamgtk - daggerfall-unity - vintagestory - gamemode - ]; - - programs.noctalia-shell.settings.brightness.enableDdcSupport = true; - programs.noctalia-shell.settings.bar = { - position = "top"; - density = "default"; - }; - - programs.spicetify = - let - spicePkgs = spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; - in - { - enable = true; - - enabledExtensions = with spicePkgs.extensions; [ - adblock - hidePodcasts - shuffle # shuffle+ (special characters are sanitized out of extension names) - ]; - enabledCustomApps = with spicePkgs.apps; [ - newReleases - ncsVisualizer - ]; - enabledSnippets = with spicePkgs.snippets; [ - rotatingCoverart - pointer - ]; - - theme = spicePkgs.themes.catppuccin; - colorScheme = "mocha"; - }; -} diff --git a/home/hosts/peach/default.nix b/home/hosts/peach/default.nix deleted file mode 100644 index 1415982..0000000 --- a/home/hosts/peach/default.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: -{ - colors = { - scheme = "catppuccin-latte"; - accent = "base09"; - }; - - home.packages = with pkgs; [ - asahi-nvram - asahi-bless - asahi-btsync - asahi-wifisync - - moonlight-qt - ]; - - # https://github.com/YaLTeR/niri/issues/2330#issuecomment-3256864777 - programs.niri.settings.debug = { - render-drm-device = "/dev/dri/card2"; - }; - - programs.noctalia-shell.settings.bar = { - position = "top"; - density = "spacious"; - }; - - programs.plasma = lib.mkDefault { - input.touchpads = [ - { - name = "Apple MTP multi-touch"; - vendorId = "05ac"; - productId = "0352"; - disableWhileTyping = false; - enable = true; - tapToClick = false; - naturalScroll = true; - accelerationProfile = "default"; - } - ]; - - shortcuts = { - # this is really annoying on apple laptops - org_kde_powerdevil.Sleep = [ ]; - }; - }; -} diff --git a/home/hosts/vm-generic/default.nix b/home/hosts/vm-generic/default.nix deleted file mode 100644 index e5488aa..0000000 --- a/home/hosts/vm-generic/default.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ - config, - pkgs, - ... -}: -{ - colors = { - scheme = "catppuccin-mocha"; - accent = "base0B"; - }; - - home.packages = with pkgs; [ ]; - - programs.plasma = { - panels = [ - # Application name, Global menu and Song information and playback controls at the top - { - location = "top"; - height = 37; - floating = false; - widgets = [ - { - applicationTitleBar = { - behavior = { - activeTaskSource = "activeTask"; - }; - layout = { - elements = [ "windowTitle" ]; - horizontalAlignment = "right"; - showDisabledElements = "deactivated"; - verticalAlignment = "center"; - }; - overrideForMaximized.enable = false; - windowTitle = { - font = { - bold = false; - fit = "fixedSize"; - size = 10; - }; - hideEmptyTitle = true; - margins = { - bottom = 5; - left = 10; - right = 0; - top = 5; - }; - source = "appName"; - }; - }; - } - "org.kde.plasma.appmenu" - "org.kde.plasma.panelspacer" - { - plasmusicToolbar = { - panelIcon = { - albumCover = { - useAsIcon = false; - radius = 8; - }; - icon = ""; - }; - playbackSource = "auto"; - musicControls.showPlaybackControls = false; - songText = { - displayInSeparateLines = true; - maximumWidth = 320; - scrolling = { - behavior = "alwaysScroll"; - speed = 3; - }; - }; - }; - } - "org.kde.plasma.marginsseparator" - { - systemTray.items = { - shown = [ - "org.kde.plasma.battery" - "org.kde.plasma.bluetooth" - "org.kde.plasma.networkmanagement" - "org.kde.plasma.brightness" - "org.kde.plasma.volume" - ]; - hidden = [ - "org.kde.plasma.clipboard" - "org.kde.plasma.manage-inputmethod" - "org.kde.plasma.cameraindicator" - "org.kde.plasma.keyboardlayout" - "org.kde.plasma.devicenotifier" - "org.kde.plasma.notifications" - "org.kde.plasma.weather" - "org.kde.plasma.printmanager" - "org.kde.plasma.keyboardindicator" - "org.kde.plasma.mediacontroller" - ]; - }; - } - { - digitalClock = { - calendar.firstDayOfWeek = "sunday"; - time.format = "12h"; - }; - } - ]; - } - ]; - }; -} diff --git a/home/kde/default.nix b/home/kde/default.nix deleted file mode 100644 index 17814d4..0000000 --- a/home/kde/default.nix +++ /dev/null @@ -1,231 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -{ - programs.ghostwriter = { - enable = true; - font = { - family = config.userOptions.fontSans.name; - pointSize = config.userOptions.fontSans.size; - }; - }; - - programs.kate = { - enable = true; - editor = { - font = { - family = config.userOptions.fontMono.name; - pointSize = config.userOptions.fontMono.size; - }; - }; - }; - - # aerothemeplasma = { - # enable = true; - # plasma.enable = true; - # fonts.enable = true; - # }; - - programs.plasma = lib.mkDefault { - enable = true; - session = { - sessionRestore.restoreOpenApplicationsOnLogin = "startWithEmptySession"; - }; - - workspace = { - wallpaperPictureOfTheDay.provider = "bing"; - wallpaperFillMode = "preserveAspectCrop"; - }; - - kscreenlocker = { - appearance.wallpaperPictureOfTheDay.provider = "bing"; - }; - - window-rules = [ - { - description = "Global Changes"; - match = { - window-class = { - value = ""; - type = "substring"; - }; - window-types = [ "normal" ]; - }; - apply = { - opacityactive = { - value = 100; - apply = "force"; - }; - opacityinactive = { - value = 100; - apply = "force"; - }; - }; - } - { - description = "OpenMW"; - match = { - window-class = { - value = "openmw"; - type = "substring"; - }; - window-types = [ "normal" ]; - }; - apply = { - noborder = { - value = true; - apply = "force"; - }; - maximizehoriz = { - value = true; - apply = "force"; - }; - maximizevert = { - value = true; - apply = "force"; - }; - desktops = { - value = "Desktop_4"; - apply = "force"; - }; - }; - } - { - description = "Minecraft"; - match = { - window-class = { - value = "Minecraft*"; - type = "substring"; - }; - window-types = [ "normal" ]; - }; - apply = { - noborder = { - value = true; - apply = "initially"; - }; - maximizehoriz = { - value = true; - apply = "initially"; - }; - maximizevert = { - value = true; - apply = "initially"; - }; - desktops = { - value = "Desktop_4"; - apply = "initially"; - }; - }; - } - { - description = "Picture-in-Picture"; - match = { - window-class = { - value = ""; - type = "substring"; - }; - title = { - value = "(?i)picture[- ]in[- ]picture"; - type = "regex"; - }; - }; - apply = { - above = { - value = true; - apply = "force"; - }; - desktops = { - value = "\\0"; - apply = "force"; - }; - }; - } - { - description = "Steam (Distrobox)"; - match = { - window-class = { - value = "steamwebhelper"; - type = "substring"; - }; - window-types = [ "normal" ]; - }; - apply = { - desktopfile = { - value = "distrobox-steam"; - apply = "force"; - }; - }; - } - ]; - - kwin = { - nightLight = { - enable = true; - mode = "location"; - # Atlanta - location.latitude = "33.7501"; - location.longitude = "-84.3885"; - temperature.day = 6000; - temperature.night = 3500; - transitionTime = 60; - }; - virtualDesktops = { - names = [ - "1" - "2" - "3" - "4" - ]; - rows = 1; - }; - effects = { - # desktopSwitching = { - # animation = "slide"; - # navigationWrapping = true; - # }; - minimization = { - animation = "magiclamp"; - duration = 500; - }; - shakeCursor.enable = true; - snapHelper.enable = true; - }; - }; - - configFile = { - # KDE has an automatic light-dark that CURRENTLY - # isn't supported by plasma-manager. - # kdeglobals.KDE.AutomaticLookAndFeel = true; - # DefaultDarkLookAndFeel = "Catppuccin-Flavor-Accent"; - # DefaultLightLookAndFeel = "Catppuccin-Flavor-Accent"; - kwinrc.Round-Corners.ActiveOutlinePalette = 2; - kwinrc.Round-Corners.ActiveOutlineUseCustom = false; - kwinrc.Round-Corners.ActiveOutlineUsePalette = true; - kwinrc.Round-Corners.ActiveSecondOutlinePalette = 2; - kwinrc.Round-Corners.ActiveSecondOutlineUseCustom = false; - kwinrc.Round-Corners.ActiveSecondOutlineUsePalette = true; - kwinrc.Round-Corners.InactiveOutlinePalette = 3; - kwinrc.Round-Corners.InactiveOutlineUseCustom = false; - kwinrc.Round-Corners.InactiveOutlineUsePalette = true; - kwinrc.Round-Corners.InactiveSecondOutlinePalette = 3; - kwinrc.Round-Corners.InactiveSecondOutlineUseCustom = false; - kwinrc.Round-Corners.InactiveSecondOutlineUsePalette = true; - plasmaparc.General.AudioFeedback = false; - kdeglobals.Sounds.Enable = false; - kwinrc.Plugins.forceblurEnabled = false; - kwinrc.Effect-blurplus.BlurDecorations = true; - kwinrc.Effect-blurplus.BlurMatching = false; - kwinrc.Effect-blurplus.BlurMenus = true; - kwinrc.Effect-blurplus.BlurNonMatching = true; - kwinrc.Effect-blurplus.TopCornerRadius = 10; - kwinrc.Effect-blurplus.BottomCornerRadius = 10; - kwinrc.Effect-blurplus.NoiseStrength = 6; - kwinrc.Effect-blurplus.RefractionStrength = 10; - ksplashrc.KSplash.Engine = "KSplashQML"; - }; - }; -} diff --git a/home/sckova/apps/default.nix b/home/sckova/apps/default.nix new file mode 100644 index 0000000..fc76571 --- /dev/null +++ b/home/sckova/apps/default.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: +{ + imports = [ + # ./discord.nix + ./firefox.nix + ./mpv.nix + # ./vscode.nix + ]; + + home.packages = with pkgs; [ + # gui applications + input-leap + libreoffice-qt-fresh + # nur.repos.forkprince.helium-nightly + nautilus + fractal + tuba + + # gui applications ( multimedia ) + audacity + strawberry + musescore + gimp + # calibre + # riff + dissent + loupe + spotify-player + + # overrides + (chromium.override { + enableWideVine = true; + }) + ]; +} diff --git a/home/apps/discord.nix b/home/sckova/apps/discord.nix similarity index 85% rename from home/apps/discord.nix rename to home/sckova/apps/discord.nix index e488076..ef37869 100644 --- a/home/apps/discord.nix +++ b/home/sckova/apps/discord.nix @@ -4,9 +4,8 @@ ... }: let - mergedThemes = pkgs.runCommand "mergedConfig" { } '' + mergedThemes = pkgs.runCommand "discordThemeDir" { } '' mkdir -p $out - cp -rvf ${pkgs.base16-discord-git}/base16.css $out/base16.css ''; vesktopSettings = { @@ -47,11 +46,6 @@ in home.file.".config/vesktop/settings/quickCss.css" = with config.scheme.withHashtag; { text = '' - * { - font-family: "${config.userOptions.fontSans.name}" !important; - font-size: ${toString config.userOptions.fontSans.size}px; - } - :root { --base00: ${base00}; --base01: ${base01}; diff --git a/home/apps/firefox.nix b/home/sckova/apps/firefox.nix similarity index 92% rename from home/apps/firefox.nix rename to home/sckova/apps/firefox.nix index 402c099..4de1b11 100644 --- a/home/apps/firefox.nix +++ b/home/sckova/apps/firefox.nix @@ -76,7 +76,7 @@ url = "https://web.whatsapp.com/"; manifestUrl = "https://web.whatsapp.com/data/manifest.json"; desktopEntry = { - icon = "${pkgs.colloid-icon-theme}/share/icons/Colloid/apps/scalable/whatsapp.svg"; + icon = "${pkgs.morewaita-icon-theme}/share/icons/MoreWaita/scalable/apps/whatsapp.svg"; categories = [ "Network" "Chat" @@ -104,7 +104,6 @@ "uBlock0@raymondhill.net".installation_mode = "allowed"; "gdpr@cavi.au.dk".installation_mode = "allowed"; "{5cce4ab5-3d47-41b9-af5e-8203eea05245}".installation_mode = "allowed"; - "plasma-browser-integration@kde.org".installation_mode = "allowed"; "jid1-MnnxcxisBPnSXQ@jetpack".installation_mode = "allowed"; "firefoxpwa@filips.si".installation_mode = "allowed"; "sponsorBlocker@ajay.app".installation_mode = "allowed"; @@ -113,6 +112,7 @@ "{446900e4-71c2-419f-a6a7-df9c091e268b}".installation_mode = "allowed"; "CanvasBlocker@kkapsner.de".installation_mode = "allowed"; "shinigamieyes@shinigamieyes".installation_mode = "allowed"; + "deArrow@ajay.app".installation_mode = "allowed"; }; DisableTelemetry = true; DisableFirefoxStudies = true; @@ -142,7 +142,6 @@ force = true; packages = with pkgs.nur.repos.rycee.firefox-addons; [ ublock-origin - plasma-integration stylus violentmonkey consent-o-matic @@ -153,6 +152,7 @@ bitwarden canvasblocker shinigami-eyes + dearrow ]; settings = { "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}".settings = { @@ -207,10 +207,20 @@ "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.showWeather" = false; "browser.download.autoHideButton" = false; - "browser.startup.homepage" = "http://localhost:8080/"; + # "browser.startup.homepage" = "http://localhost:5364/"; + "browser.tabs.splitview.hasUsed" = true; # Disable Firefox's machine learning (AI) features "browser.ml.enable" = false; + "browser.ml.chat.enabled" = false; + "browser.ml.chat.page" = false; + "browser.ai.control.default" = "blocked"; + "browser.ai.control.linkPreviewKeyPoints" = "blocked"; + "browser.ai.control.pdfjsAltText" = "blocked"; + "browser.ai.control.sidebarChatbot" = "blocked"; + "browser.ai.control.smartTabGroups" = "blocked"; + "browser.ai.control.translations" = "blocked"; + "sidebar.notification.badge.aichat" = false; # For browser toolbox/live editing user CSS "devtools.chrome.enabled" = true; @@ -228,12 +238,12 @@ "jid1-mnnxcxisbpnsxq_jetpack-browser-action" "gdpr_cavi_au_dk-browser-action" "firefoxpwa_filips_si-browser-action" - "plasma-browser-integration_kde_org-browser-action" "canvasblocker_kkapsner_de-browser-action" "_5cce4ab5-3d47-41b9-af5e-8203eea05245_-browser-action" "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" "_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action" "_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action" + "dearrow_ajay_app-browser-action" ]; nav-bar = [ # "sidebar-button" @@ -252,7 +262,6 @@ seen = [ "gdpr_cavi_au_dk-browser-action" "firefoxpwa_filips_si-browser-action" - "plasma-browser-integration_kde_org-browser-action" "jid1-mnnxcxisbpnsxq_jetpack-browser-action" "canvasblocker_kkapsner_de-browser-action" "_5cce4ab5-3d47-41b9-af5e-8203eea05245_-browser-action" @@ -261,6 +270,7 @@ "_aecec67f-0d10-4fa7-b7c7-609a2db280cf_-browser-action" "_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action" "sponsorblocker_ajay_app-browser-action" + "dearrow_ajay_app-browser-action" "developer-button" ]; dirtyAreaCache = [ @@ -306,8 +316,8 @@ }; search = let - nixIcon = "${pkgs.colloid-icon-theme}/share/icons/Colloid/apps/scalable/nix-snowflake.svg"; - searchIcon = "${pkgs.colloid-icon-theme}/share/icons/Colloid-Dark/places/symbolic/folder-saved-search-symbolic.svg"; + nixIcon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + searchIcon = "${pkgs.adwaita-icon-theme}/share/icons/Adwaita/scalable/places/folder-saved-search-symbolic.svg"; in { force = true; @@ -369,7 +379,7 @@ searxng = { name = "SearXNG"; - urls = [ { template = "http://localhost:8080/search?q={searchTerms}"; } ]; + urls = [ { template = "http://localhost:5364/search?q={searchTerms}"; } ]; icon = searchIcon; definedAliases = [ "@go" ]; }; diff --git a/home/apps/firefox_css/theme/hide.css b/home/sckova/apps/firefox_css/theme/hide.css similarity index 94% rename from home/apps/firefox_css/theme/hide.css rename to home/sckova/apps/firefox_css/theme/hide.css index ba0975a..7d7386d 100644 --- a/home/apps/firefox_css/theme/hide.css +++ b/home/sckova/apps/firefox_css/theme/hide.css @@ -14,7 +14,7 @@ visibility: hidden !important; } -.browserContainer { +/*.browserContainer { border-radius: 8px !important; margin: 6px !important; background-color: transparent !important; @@ -22,4 +22,4 @@ browser { border-radius: 8px !important; -} +}*/ diff --git a/home/apps/firefox_css/theme/theme-new.css b/home/sckova/apps/firefox_css/theme/theme-new.css similarity index 100% rename from home/apps/firefox_css/theme/theme-new.css rename to home/sckova/apps/firefox_css/theme/theme-new.css diff --git a/home/apps/firefox_css/theme/theme.css b/home/sckova/apps/firefox_css/theme/theme.css similarity index 100% rename from home/apps/firefox_css/theme/theme.css rename to home/sckova/apps/firefox_css/theme/theme.css diff --git a/home/apps/firefox_css/userChrome.css b/home/sckova/apps/firefox_css/userChrome.css similarity index 100% rename from home/apps/firefox_css/userChrome.css rename to home/sckova/apps/firefox_css/userChrome.css diff --git a/home/apps/mpv.nix b/home/sckova/apps/mpv.nix similarity index 100% rename from home/apps/mpv.nix rename to home/sckova/apps/mpv.nix diff --git a/home/apps/vencord.nix b/home/sckova/apps/vencord.nix similarity index 100% rename from home/apps/vencord.nix rename to home/sckova/apps/vencord.nix diff --git a/home/apps/vscode.nix b/home/sckova/apps/vscode.nix similarity index 100% rename from home/apps/vscode.nix rename to home/sckova/apps/vscode.nix diff --git a/home/sckova/default.nix b/home/sckova/default.nix new file mode 100644 index 0000000..6513c7e --- /dev/null +++ b/home/sckova/default.nix @@ -0,0 +1,10 @@ +{ + # the user to activate + userOptions = { + name = "Sean Kovacs"; + username = "sckova"; + email = "kovacsmillio@gmail.com"; + }; + + sops.age.keyFile = "/home/sckova/.config/sops/age/keys.txt"; +} diff --git a/home/sckova/games/default.nix b/home/sckova/games/default.nix new file mode 100644 index 0000000..71db260 --- /dev/null +++ b/home/sckova/games/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + imports = [ + ./minecraft.nix + ./morrowind.nix + ]; + + home.packages = with pkgs; [ + dolphin-emu + ]; +} diff --git a/home/games/minecraft.nix b/home/sckova/games/minecraft.nix similarity index 100% rename from home/games/minecraft.nix rename to home/sckova/games/minecraft.nix diff --git a/home/games/morrowind.nix b/home/sckova/games/morrowind.nix similarity index 70% rename from home/games/morrowind.nix rename to home/sckova/games/morrowind.nix index be92688..ff85bab 100644 --- a/home/games/morrowind.nix +++ b/home/sckova/games/morrowind.nix @@ -1,15 +1,10 @@ { - config, pkgs, ... }: { - home = { - packages = with pkgs; [ openmw ]; - sessionVariables = { - SDL_VIDEO_DRIVER = "wayland"; - }; - }; + home.packages = with pkgs; [ openmw ]; + home.sessionVariables.SDL_VIDEO_DRIVER = "wayland"; programs.firefox.profiles.default.search.engines.uesp = { name = "Unofficial Elder Scrolls Pages"; diff --git a/home/sckova/hosts/alien/default.nix b/home/sckova/hosts/alien/default.nix new file mode 100644 index 0000000..d7e12b6 --- /dev/null +++ b/home/sckova/hosts/alien/default.nix @@ -0,0 +1,46 @@ +{ + pkgs, + ... +}: +{ + colors = { + scheme = "catppuccin-mocha"; + accent = "base0D"; + }; + + home.packages = with pkgs; [ + ckan + spotify + adwsteamgtk + daggerfall-unity + vintagestory + gamemode + ]; + + # PROTON_ENABLE_NVAPI=1 PROTON_DLSS_UPGRADE=1 PROTON_ENABLE_NGX_UPDATER=1 DXVK_NVAPI_DRS_SETTINGS=NGX_DLSS_SR_MODE=balanced MANGOHUD_CONFIG="fps_limit=144,gamemode,ram,vram" mangohud gamemoderun %command% + xdg.desktopEntries.steam-big-picture = { + name = "Steam (Big Picture)"; + icon = "steam"; + exec = "gamescope -e --force-grab-cursor -s 2 -- steam -tenfoot"; + terminal = false; + categories = [ + "Network" + "FileTransfer" + "Game" + ]; + }; + + home.sessionVariables = { + PROTON_ENABLE_NVAPI = 1; + PROTON_DLSS_UPGRADE = 1; + PROTON_ENABLE_NGX_UPDATER = 1; + DXVK_NVAPI_DRS_SETTINGS = "NGX_DLSS_SR_MODE=balanced"; + MANGOHUD_CONFIG = "fps_limit=144,gamemode,ram,vram"; + }; + + programs.noctalia-shell.settings.brightness.enableDdcSupport = true; + programs.noctalia-shell.settings.bar = { + position = "top"; + density = "default"; + }; +} diff --git a/home/sckova/hosts/peach/default.nix b/home/sckova/hosts/peach/default.nix new file mode 100644 index 0000000..4f09801 --- /dev/null +++ b/home/sckova/hosts/peach/default.nix @@ -0,0 +1,40 @@ +{ + pkgs, + lib, + ... +}: +{ + colors = { + scheme = "catppuccin-frappe"; + accent = "base09"; + }; + + home.packages = with pkgs; [ + asahi-nvram + asahi-bless + asahi-btsync + asahi-wifisync + + moonlight-qt + ]; + + programs = { + noctalia-shell.settings.bar = { + position = "top"; + density = "spacious"; + }; + + niri.settings.outputs."eDP-1" = { + scale = 1.5; + mode = { + width = 3024; + height = 1964; + refresh = 120.000; + }; + position = { + x = 272; + y = 1440; + }; + }; + }; +} diff --git a/home/sckova/services/default.nix b/home/sckova/services/default.nix new file mode 100644 index 0000000..c20f727 --- /dev/null +++ b/home/sckova/services/default.nix @@ -0,0 +1,252 @@ +{ + osConfig, + config, + pkgs, + ... +}: +{ + imports = [ + ./gtk.nix + ./qt.nix + ./systemd.nix + ]; + + home.packages = with pkgs; [ + adwaita-icon-theme + morewaita-icon-theme + ]; + + home.file = { + ".icons/default/index.theme" = { + text = '' + [Icon Theme] + Name=Default + Comment=Default Cursor Theme + Inherits=${config.userOptions.cursor.name} + ''; + force = true; + }; + }; + + services.spotifyd.enable = true; + # comments taken from https://docs.spotifyd.rs/configuration/index.html + services.spotifyd.settings.global = { + #---------# + # GENERAL # + #---------# + + # The name that gets displayed under the connect tab on + # official clients. + device_name = "daemon@${osConfig.system.name}"; + + # The displayed device type in Spotify clients. + # Can be unknown, computer, tablet, smartphone, speaker, t_v, + # a_v_r (Audio/Video Receiver), s_t_b (Set-Top Box), and audio_dongle. + device_type = "computer"; + + # The bus to bind to with the MPRIS interface. + # Possible values: "session", "system" + # The system bus can be used if no graphical session is available + # (e.g. on headless systems) but you still want to be able to use MPRIS. + # NOTE: You might need to add appropriate policies to allow spotifyd to + # own the name. + dbus_type = "session"; + + # If set to true, `spotifyd` tries to bind to dbus (default is the session bus) + # and expose MPRIS controls. When running headless, without the session bus, + # you should set this to false, to avoid errors. If you still want to use MPRIS, + # have a look at the `dbus_type` option. + use_mpris = true; + + # The directory used to store credentials and audio cache. + # Default: infers a sensible cache directory (e.g. on Linux: $XDG_CACHE_HOME) + # Note: The file path does not get expanded. Environment variables and + # shell placeholders like $HOME or ~ don't work! + # cache_path = ""; + + # If set to true, audio data does NOT get cached. + # In this case, the cache is only used for credentials. + no_audio_cache = false; + + # The maximal size of the cache directory in bytes + # The value below corresponds to ~ 10GB + max_cache_size = 10000000000; + + #-----------# + # DISCOVERY # + #-----------# + + # If set to true, this disables zeroconf discovery. + # This can be useful, if one prefers to run a single-user instance. + disable_discovery = true; + + #-------# + # AUDIO # + #-------# + + # The audio backend used to play music. To get + # a list of possible backends, run `spotifyd --help`. + backend = "alsa"; # use portaudio for macOS [homebrew] + + # The alsa audio device to stream audio. To get a + # list of valid devices, run `aplay -L`, + device = "default"; # omit for macOS + + # If set to true, enables volume normalisation between songs. + volume_normalisation = true; + + # The normalisation pregain that is applied for each song. + normalisation_pregain = 0; + + # The audio bitrate. 96, 160 or 320 kbit/s + bitrate = 320; + + # Volume on startup between 0 and 100 + initial_volume = 100; + + #-------ä + # OTHER # + #-------# + + # After the music playback has ended, start playing similar songs based on the previous tracks. + # By default, `spotifyd` infers this setting from the user settings. + autoplay = false; + }; + + dconf.settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + clock-format = "12h"; + clock-show-weekday = true; + }; + "org/gnome/desktop/wm/preferences" = { + button-layout = ":"; + action-double-click-titlebar = "'none'"; + }; + "org/gnome/desktop/media-handling" = { + automount = false; + automount-open = false; + autorun-never = true; + }; + "org/gnome/settings-daemon/plugins/power" = { + sleep-inactive-ac-type = "nothing"; + }; + "org/gnome/mutter" = { + edge-tiling = true; + dynamic-workspaces = true; + experimental-features = [ "variable-refresh-rate" ]; + }; + }; + + home.pointerCursor = { + gtk.enable = true; + name = config.userOptions.cursor.name; + package = config.userOptions.cursor.package; + size = config.userOptions.cursor.size; + }; + + home.sessionVariables = { + QT_QPA_PLATFORMTHEME = "qt6ct"; + # this makes electron apps work per the wiki + NIXOS_OZONE_WL = "1"; + # allow non-free packages in shells + NIXPKGS_ALLOW_UNFREE = 1; + }; + + gtk = { + enable = true; + gtk4.theme = null; + + colorScheme = "dark"; + iconTheme = { + name = "MoreWaita"; + package = pkgs.morewaita-icon-theme; + }; + + cursorTheme = { + name = config.home.pointerCursor.name; + package = config.home.pointerCursor.package; + size = config.home.pointerCursor.size; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = true; + gtk-decoration-layout = ":"; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = true; + gtk-decoration-layout = ":"; + }; + }; + + xdg.mimeApps = { + enable = true; + associations.added = { + "x-scheme-handler/http" = [ "firefox.desktop" ]; + "x-scheme-handler/https" = [ "firefox.desktop" ]; + "x-scheme-handler/discord" = [ "vesktop.desktop" ]; + "x-scheme-handler/spotify" = [ "riff.desktop" ]; + "inode/directory" = [ "org.gnome.Nautilus.desktop" ]; + "image/png" = [ "loupe.desktop" ]; + "image/jpeg" = [ "loupe.desktop" ]; + }; + defaultApplications = { + # Web + "x-scheme-handler/http" = [ "firefox.desktop" ]; + "x-scheme-handler/https" = [ "firefox.desktop" ]; + "text/html" = [ "firefox.desktop" ]; + + # Communication & Social + "x-scheme-handler/discord" = [ "vesktop.desktop" ]; + "x-scheme-handler/spotify" = [ "riff.desktop" ]; + + # File Management + "inode/directory" = [ "org.gnome.Nautilus.desktop" ]; + + # Torrents + "application/x-bittorrent" = [ "org.qbittorrent.qBittorrent.desktop" ]; + "x-scheme-handler/magnet" = [ "org.qbittorrent.qBittorrent.desktop" ]; + + # Documents + "application/pdf" = [ "firefox.desktop" ]; # Or libreoffice-draw.desktop + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = [ + "libreoffice-writer.desktop" + ]; # docx + "application/msword" = [ "libreoffice-writer.desktop" ]; # doc + "application/vnd.oasis.opendocument.text" = [ "libreoffice-writer.desktop" ]; # odt + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = [ + "libreoffice-calc.desktop" + ]; # xlsx + "application/vnd.ms-excel" = [ "libreoffice-calc.desktop" ]; # xls + "application/vnd.oasis.opendocument.spreadsheet" = [ "libreoffice-calc.desktop" ]; # ods + + # Text & Code + "text/plain" = [ "nvim.desktop" ]; + "text/markdown" = [ "nvim.desktop" ]; + "application/x-shellscript" = [ "nvim.desktop" ]; + "application/json" = [ "nvim.desktop" ]; + "text/x-c" = [ "nvim.desktop" ]; + "text/x-c++" = [ "nvim.desktop" ]; + "text/x-python" = [ "nvim.desktop" ]; + "text/x-makefile" = [ "nvim.desktop" ]; + + # Terminal + "x-scheme-handler/terminal" = [ "kitty.desktop" ]; + + # Media + "video/mp4" = [ "mpv.desktop" ]; + "video/mkv" = [ "mpv.desktop" ]; + "video/webm" = [ "mpv.desktop" ]; + "audio/mpeg" = [ "mpv.desktop" ]; + "audio/flac" = [ "mpv.desktop" ]; + "audio/wav" = [ "mpv.desktop" ]; + + # Images + "image/png" = [ "loupe.desktop" ]; + "image/jpeg" = [ "loupe.desktop" ]; + "image/webp" = [ "loupe.desktop" ]; + "image/gif" = [ "loupe.desktop" ]; + }; + }; +} diff --git a/home/services/gtk.nix b/home/sckova/services/gtk.nix similarity index 100% rename from home/services/gtk.nix rename to home/sckova/services/gtk.nix diff --git a/home/services/qt.nix b/home/sckova/services/qt.nix similarity index 75% rename from home/services/qt.nix rename to home/sckova/services/qt.nix index 6f322fc..8671894 100644 --- a/home/services/qt.nix +++ b/home/sckova/services/qt.nix @@ -4,39 +4,15 @@ ... }: { - home.packages = with pkgs; [ - kdePackages.qtstyleplugin-kvantum - themix-gui - kvmarwaita - ]; - - # home.file.".config/Kvantum" = { - # source = ./kvantum; - # recursive = true; - # force = true; - # }; - - # home.file.".config/Kvantum/kvantum.kvconfig" = { - # text = '' - # [General] - # theme= - # ''; - # force = true; - # }; - qt = { enable = true; - style = { - name = "kvantum"; - package = pkgs.qt6Packages.qtstyleplugin-kvantum; - }; qt5ctSettings = { Appearance = { - style = "kvantum"; + style = "Breeze"; icon_theme = config.gtk.iconTheme.name; - # color_scheme_path = "/home/${config.userOptions.username}/.config/qt5ct/qt5ct.conf"; - # custom_palette = true; + color_scheme_path = "/home/${config.userOptions.username}/.config/qt5ct/qt5ct.conf"; + custom_palette = true; standard_dialogs = "xdgdesktopportal"; }; Fonts = config.qt.qt6ctSettings.Fonts; @@ -45,10 +21,10 @@ qt6ctSettings = { Appearance = { - style = "kvantum"; + style = "Breeze"; icon_theme = config.gtk.iconTheme.name; - # color_scheme_path = "/home/${config.userOptions.username}/.config/qt6ct/qt6ct.conf"; - # custom_palette = true; + color_scheme_path = "/home/${config.userOptions.username}/.config/qt6ct/qt6ct.conf"; + custom_palette = true; standard_dialogs = "xdgdesktopportal"; }; diff --git a/home/sckova/services/systemd.nix b/home/sckova/services/systemd.nix new file mode 100644 index 0000000..ab47600 --- /dev/null +++ b/home/sckova/services/systemd.nix @@ -0,0 +1,60 @@ +{ + config, + pkgs, + ... +}: +{ + systemd.user.sessionVariables = { + XCURSOR_THEME = config.userOptions.cursor.name; + XCURSOR_SIZE = toString config.userOptions.cursor.size; + XCURSOR_PATH = config.userOptions.cursor.path; + }; + + sops.templates."synology.conf".content = '' + [synology] + type = smb + host = nas.taila30609.ts.net + pass = ${config.sops.placeholder.rclone_synology} + ''; + + systemd.user.services.synology-mount = { + Unit = { + Description = "Mount Synology NAS with Rclone and Home Manager."; + After = [ "tailscaled.service" ]; + Wants = [ "tailscaled.service" ]; + StartLimitBurst = 5; + StartLimitIntervalSec = "1m"; + }; + + Service = { + Type = "simple"; + Restart = "on-failure"; + RestartSec = "1m"; + ExecStart = "${pkgs.writeShellScript "synology-mount" '' + #!/usr/bin/env bash + set -euo pipefail + + # Ensure mount point exists + mkdir -p $HOME/Synology || true + + # Unmount stale mount if present + /run/wrappers/bin/umount "$HOME/Synology" || true + + # Mount rclone in foreground + ${pkgs.rclone}/bin/rclone \ + --config=${config.sops.templates."synology.conf".path} \ + --ignore-checksum \ + --log-level INFO \ + --rc --rc-serve \ + mount "synology:home" "$HOME/Synology" + ''}"; + ExecStop = "/run/wrappers/bin/fusermount -uz %h/Synology/%i"; + StandardOutput = "journal"; + StandardError = "journal"; + }; + + Install = { + WantedBy = [ "default.target" ]; + }; + }; +} diff --git a/home/terminal/btop.conf b/home/sckova/terminal/btop.conf similarity index 100% rename from home/terminal/btop.conf rename to home/sckova/terminal/btop.conf diff --git a/home/sckova/terminal/btop.nix b/home/sckova/terminal/btop.nix new file mode 100644 index 0000000..b8db438 --- /dev/null +++ b/home/sckova/terminal/btop.nix @@ -0,0 +1,108 @@ +{ + config, + pkgs, + ... +}: +let + btop-colors-file = pkgs.writeTextFile { + name = "btop-colors"; + text = with config.scheme.withHashtag; '' + # Credit to https://github.com/catppuccin/btop + # Main background, empty for terminal default, need to be empty if you want transparent background + theme[main_bg]="${base00}" + + # Main text color + theme[main_fg]="${base05}" + + # Title color for boxes + theme[title]="${base05}" + + # Highlight color for keyboard shortcuts + theme[hi_fg]="${base0D}" + + # Background color of selected item in processes box + theme[selected_bg]="${base02}" + + # Foreground color of selected item in processes box + theme[selected_fg]="${base0D}" + + # Color of inactive/disabled text + theme[inactive_fg]="${base03}" + + # Color of text appearing on top of graphs, i.e uptime and current network graph scaling + theme[graph_text]="${base06}" + + # Background color of the percentage meters + theme[meter_bg]="${base02}" + + # Misc colors for processes box including mini cpu graphs, details memory graph and details status text + theme[proc_misc]="${base06}" + + # CPU, Memory, Network, Proc box outline colors + theme[cpu_box]="${base0E}" #Mauve + theme[mem_box]="${base0B}" #Green + theme[net_box]="${base12}" #Maroon + theme[proc_box]="${base0D}" #Blue + + # Box divider line and small boxes line color + theme[div_line]="${base03}" + + # Temperature graph color (Green -> Yellow -> Red) + theme[temp_start]="${base0B}" + theme[temp_mid]="${base0A}" + theme[temp_end]="${base08}" + + # CPU graph colors (Teal -> Lavender) + theme[cpu_start]="${base0C}" + theme[cpu_mid]="${base16}" + theme[cpu_end]="${base07}" + + # Mem/Disk free meter (Mauve -> Lavender -> Blue) + theme[free_start]="${base0E}" + theme[free_mid]="${base07}" + theme[free_end]="${base0D}" + + # Mem/Disk cached meter (Sapphire -> Lavender) + theme[cached_start]="${base16}" + theme[cached_mid]="${base0D}" + theme[cached_end]="${base07}" + + # Mem/Disk available meter (Peach -> Red) + theme[available_start]="${base09}" + theme[available_mid]="${base12}" + theme[available_end]="${base08}" + + # Mem/Disk used meter (Green -> Sky) + theme[used_start]="${base0B}" + theme[used_mid]="${base0C}" + theme[used_end]="${base15}" + + # Download graph colors (Peach -> Red) + theme[download_start]="${base09}" + theme[download_mid]="${base12}" + theme[download_end]="${base08}" + + # Upload graph colors (Green -> Sky) + theme[upload_start]="${base0B}" + theme[upload_mid]="${base0C}" + theme[upload_end]="${base15}" + + # Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) + theme[process_start]="${base16}" + theme[process_mid]="${base07}" + theme[process_end]="${base0E}" + ''; + destination = "/nixos.theme"; + }; + + batConfigDir = pkgs.runCommand "mergedConfig" { } '' + mkdir -p $out/themes + cp -r ${btop-colors-file}/nixos.theme $out/themes/nixos.theme + ''; +in +{ + home.file.".config/btop" = { + source = batConfigDir; + recursive = true; + }; +} diff --git a/home/sckova/terminal/default.nix b/home/sckova/terminal/default.nix new file mode 100644 index 0000000..b617f62 --- /dev/null +++ b/home/sckova/terminal/default.nix @@ -0,0 +1,109 @@ +{ + config, + pkgs, + ... +}: +{ + imports = [ + ./btop.nix + ./fish.nix + ./kitty.nix + ./neovim.nix + ./ytfp.nix + ]; + + home.packages = with pkgs; [ + # cli utilities + tmux + fastfetch + btop + wget + ripgrep + ncdu + wl-clipboard + rclone + waypipe + spotdl + browsh + mosh + gh + kdePackages.qttools + eza + pigz + + # development & tooling + jdk21_headless + quickemu + nerd-fonts.noto + noto-fonts + noto-fonts-color-emoji + nix-prefetch + prowlarr + radarr + sonarr + flaresolverr + nerd-fonts.fira-mono + ffmpeg-full + + # formatters + kdePackages.qtdeclarative + prettier + prettierd + nixfmt + stylua + black + clang-tools + ]; + + programs = { + git = { + enable = true; + settings = { + user = { + name = config.userOptions.name; + email = config.userOptions.email; + }; + core.pager = "${pkgs.bat}/bin/bat"; + commit.gpgsign = true; + init.defaultBranch = "main"; + }; + }; + bat = { + enable = true; + config = { + style = "numbers,changes"; + theme = "base16"; + }; + }; + lazygit = { + enable = true; + enableFishIntegration = true; + }; + lazysql.enable = true; + fzf = { + enable = true; + enableFishIntegration = true; + defaultOptions = [ + "--height 40%" + "--border" + ]; + colors = with config.scheme.withHashtag; { + bg = base00; + "bg+" = base01; + border = base03; + fg = base05; + "fg+" = base05; + header = base08; + hl = base08; + "hl+" = base08; + info = config.scheme.withHashtag.${config.colors.accent}; + label = base05; + marker = base07; + pointer = base06; + prompt = config.scheme.withHashtag.${config.colors.accent}; + "selected-bg" = base02; + spinner = base06; + }; + }; + }; +} diff --git a/home/terminal/fish.nix b/home/sckova/terminal/fish.nix similarity index 85% rename from home/terminal/fish.nix rename to home/sckova/terminal/fish.nix index ca784f0..733a01c 100644 --- a/home/terminal/fish.nix +++ b/home/sckova/terminal/fish.nix @@ -1,16 +1,9 @@ { - pkgs, config, lib, ... }: { - home.packages = with pkgs; [ - kdePackages.qttools - eza - pigz - ]; - programs.fish = { enable = true; shellAliases = { @@ -39,10 +32,6 @@ description = "Wrapper for nix-shell that runs fish by default"; body = builtins.readFile ./fish_functions/nix-shell.fish; }; - logout = { - description = "Log out of KDE Plasma"; - body = builtins.readFile ./fish_functions/logout.fish; - }; }; }; diff --git a/home/terminal/fish_functions/fish-prompt.fish b/home/sckova/terminal/fish_functions/fish-prompt.fish similarity index 100% rename from home/terminal/fish_functions/fish-prompt.fish rename to home/sckova/terminal/fish_functions/fish-prompt.fish diff --git a/home/terminal/fish_functions/kitty-ssh.fish b/home/sckova/terminal/fish_functions/kitty-ssh.fish similarity index 100% rename from home/terminal/fish_functions/kitty-ssh.fish rename to home/sckova/terminal/fish_functions/kitty-ssh.fish diff --git a/home/terminal/fish_functions/nix-shell.fish b/home/sckova/terminal/fish_functions/nix-shell.fish similarity index 100% rename from home/terminal/fish_functions/nix-shell.fish rename to home/sckova/terminal/fish_functions/nix-shell.fish diff --git a/home/sckova/terminal/kitty.nix b/home/sckova/terminal/kitty.nix new file mode 100644 index 0000000..40b049c --- /dev/null +++ b/home/sckova/terminal/kitty.nix @@ -0,0 +1,127 @@ +{ + config, + pkgs, + ... +}: +{ + home.file.".config/kitty/themes" = { + source = pkgs.writeTextFile { + name = "kitty-colors"; + text = with config.scheme.withHashtag; '' + # vim:ft=kitty + ## name: NixOS Kitty Theme + ## author: Catppuccin Org & sckova + ## license: MIT + ## upstream: https://github.com/catppuccin/kitty + ## blurb: The theme generated from the NixOS configuration! + + # The basic colors + foreground ${base05} + background ${base00} + selection_foreground ${base00} + selection_background ${base05} + + # Cursor colors + cursor ${base05} + cursor_text_color ${base00} + + # URL underline color when hovering with mouse + url_color ${base05} + + # Kitty window border colors + active_border_color ${config.scheme.withHashtag.${config.colors.accent}} + inactive_border_color ${base01} + bell_border_color ${base12} + + # Tab bar colors + active_tab_foreground ${base11} + active_tab_background ${config.scheme.withHashtag.${config.colors.accent}} + inactive_tab_foreground ${base05} + inactive_tab_background ${base10} + tab_bar_background ${base11} + + # Colors for marks (marked text in the terminal) + mark1_foreground ${base00} + mark1_background ${base09} + mark2_foreground ${base00} + mark2_background ${base0D} + mark3_foreground ${base00} + mark3_background ${base15} + + # The 16 terminal colors + # black + color0 ${base02} + color8 ${base02} + + # red + color1 ${base08} + color9 ${base08} + + # green + color2 ${base0B} + color10 ${base0B} + + # yellow + color3 ${base0A} + color11 ${base0A} + + # blue + color4 ${base0D} + color12 ${base0D} + + # magenta + color5 ${base17} + color13 ${base17} + + # cyan + color6 ${base0C} + color14 ${base0C} + + # white + color7 ${base04} + color15 ${base04} + ''; + destination = "/kitty-colors.conf"; + }; + + recursive = true; + }; + + home.file.".config/kitty/ssh.conf" = { + text = '' + shell_integration inherited + ''; + }; + + programs = { + kitty = { + enable = true; + enableGitIntegration = true; + font = { + name = config.userOptions.fontMono.name; + size = config.userOptions.fontMono.size; + }; + shellIntegration.enableFishIntegration = true; + keybindings = { + "ctrl+k" = "combine : clear_terminal scroll active : clear_terminal scrollback active"; + }; + settings = { + include = "/home/${config.userOptions.username}/.config/kitty/themes/kitty-colors.conf"; + scrollback_lines = 10000; + wheel_scroll_multiplier = 5.0; + touch_scroll_multiplier = 5.0; + enable_audio_bell = false; + update_check_interval = 0; + confirm_os_window_close = 0; + window_padding_width = 4; + tab_bar_min_tabs = 2; + tab_bar_edge = "top"; + tab_bar_style = "powerline"; + tab_powerline_style = "slanted"; + mouse_hide_wait = "-1.0"; + wayland_titlebar_color = "system"; + macos_titlebar_color = "system"; + }; + }; + }; +} diff --git a/home/terminal/neovim.nix b/home/sckova/terminal/neovim.nix similarity index 78% rename from home/terminal/neovim.nix rename to home/sckova/terminal/neovim.nix index 65ace66..559c209 100644 --- a/home/terminal/neovim.nix +++ b/home/sckova/terminal/neovim.nix @@ -1,22 +1,10 @@ { - pkgs, config, + lib, ... }: { - home.sessionVariables = { - EDITOR = "nvim"; - }; - - home.packages = with pkgs; [ - kdePackages.qtdeclarative - prettier - prettierd - nixfmt - stylua - black - clang-tools - ]; + home.sessionVariables.EDITOR = lib.mkForce "nvim"; programs.nixvim = { enable = true; @@ -36,49 +24,38 @@ expandtab = true; number = true; }; - colorschemes.palette = { + + colorschemes.base16 = { enable = true; - settings = { - palettes = { - main = "base16_custom"; - accent = "base16_custom"; - state = "base16_custom"; + setUpBar = false; + colorscheme = + let + cleanScheme = { + inherit (config.scheme.withHashtag) + base00 + base01 + base02 + base03 + base04 + base05 + base06 + base07 + base08 + base09 + base0A + base0B + base0C + base0D + base0E + base0F + ; + }; + in + cleanScheme + // { + base08 = cleanScheme.${config.colors.accent}; + ${config.colors.accent} = cleanScheme.base08; }; - - # this is helpful for figuring out what color is what: - # https://github.com/tinted-theming/schemes/blob/spec-0.11/base24/catppuccin-frappe.yaml - custom_palettes = with config.scheme.withHashtag; { - main.base16_custom = { - color0 = base00; # background - color1 = base01; # lighter background - color2 = base02; # selection background - color3 = base03; # color inside ${} - color4 = base04; # dark foreground - color5 = config.scheme.withHashtag.${config.colors.accent}; # default foreground, left side of assignments - color6 = base03; # comments - color7 = base07; # lightest foreground - color8 = base05; # variables/tags - }; - - accent.base16_custom = { - accent0 = base08; # red, integers/constants - accent1 = base0A; # orange, classes/search - accent2 = base0A; # yellow, strings/inherited - accent3 = base0B; # green, support/regex - accent4 = base0D; # blue, functions/headings - accent5 = base0E; # purple, keywords/bold - accent6 = base07; # lavender, deprecated/embedded - }; - - state.base16_custom = { - error = base08; # red - warning = base0A; # yellow - hint = base0C; # cyan - ok = base0B; # green - info = base0D; # blue - }; - }; - }; }; keymaps = [ @@ -168,7 +145,6 @@ option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; keywordLength = 3; } - { name = "copilot"; } { name = "path"; # file system paths keywordLength = 3; diff --git a/home/sckova/terminal/ytfp.nix b/home/sckova/terminal/ytfp.nix new file mode 100644 index 0000000..cc32b48 --- /dev/null +++ b/home/sckova/terminal/ytfp.nix @@ -0,0 +1,47 @@ +# full credit to u/SupermarketAntique32 on reddit: +# https://www.reddit.com/r/commandline/comments/1sd26he/youtube_search_and_play_in_20_lines_of_bash/ +{ + pkgs, + config, + ... +}: +{ + home.packages = with pkgs; [ + (writeShellApplication { + name = "ytfp"; + runtimeInputs = [ + bash + curl + fzf + yt-dlp + chafa + config.programs.mpv.finalPackage + ]; + text = '' + # `ytfp`: Search YouTube video using `fzf` and play it in `mpv` + + SEARCH_VID() { + yt-dlp "https://www.youtube.com/results?search_query=$1" \ + --flat-playlist --playlist-items 1:20 --print \ + $'%(thumbnails.0.url)s\t%(title)s\t%(channel)s\t%(view_count)s\t%(url)s' \ + | grep --extended-regexp --invert-match 'playlist|channel' + } + RENDER_VID_INFO() { + curl --silent "$1" | chafa --size=x14 --clear + echo "Title : $2" + echo "Channel : $3" + echo "Views : $4" + } + export -f SEARCH_VID RENDER_VID_INFO + + fzf --preview-window down --layout reverse --disabled --with-shell 'bash -c' \ + --bind 'start:reload:SEARCH_VID fzf' \ + --bind 'change:reload:sleep 0.3; SEARCH_VID {q} || true' \ + --bind 'load:first' \ + --delimiter '\t' --with-nth 2 \ + --preview 'RENDER_VID_INFO {1} {2} {3} {4}' \ + --bind 'enter:execute-silent(mpv {5})' + ''; + }) + ]; +} diff --git a/home/sckova/tiling/default.nix b/home/sckova/tiling/default.nix new file mode 100644 index 0000000..7299d80 --- /dev/null +++ b/home/sckova/tiling/default.nix @@ -0,0 +1,114 @@ +{ pkgs, config, ... }: +{ + imports = [ + ./niri.nix + ./noctalia.nix + ./wallpaper.nix + ]; + + home.packages = with pkgs; [ + xdg-desktop-portal + brightnessctl + qt6Packages.qt6ct + libsForQt5.qt5ct + catppuccin-qt5ct + xwayland-satellite + playerctl + ]; + + programs.fuzzel = { + enable = true; + package = pkgs.fuzzel; + settings = { + main = { + terminal = "${pkgs.kitty}/bin/kitty"; + layer = "overlay"; + font = with config.userOptions.fontMono; name + ":size=" + toString (size + 2); + launch-prefix = "${pkgs.niri}/bin/niri msg action spawn --"; + icon-theme = config.gtk.iconTheme.name; + }; + border = { + width = 2; + radius = 8; + }; + colors = with config.scheme; { + background = base00 + "E6"; + text = base05 + "E6"; + prompt = base04 + "E6"; + placeholder = base04 + "E6"; + input = base05 + "E6"; + match = config.scheme.withHashtag.${config.colors.accent} + "FF"; + selection = base04 + "E6"; + selection-text = base00 + "E6"; + counter = base04 + "E6"; + border = config.scheme.withHashtag.${config.colors.accent} + "FF"; + }; + }; + }; + + programs.swaylock = with config.scheme; { + enable = true; + # package = pkgs.swaylock-effects; + settings = { + # this would sometimes load the previous day's wallpaper + # when it is run before the bing retrieval script finishes + # image = "~/.local/share/wallpaper/daily-colored.jpg"; + # effect-blur = "7x5"; + color = "000000"; # black + font-size = 24; + indicator-idle-visible = true; + indicator-radius = 100; + show-failed-attempts = true; + + bs-hl-color = base09 + "E6"; # peach + caps-lock-bs-hl-color = base09 + "E6"; # peach + caps-lock-key-hl-color = base0E + "E6"; # mauve + inside-color = base00 + "E6"; # base + inside-clear-color = base00 + "E6"; # base + inside-caps-lock-color = base00 + "E6"; # base + inside-ver-color = base00 + "E6"; # base + inside-wrong-color = base00 + "E6"; # base + key-hl-color = base0D + "E6"; # blue + layout-bg-color = base00 + "E6"; # base + layout-border-color = base00 + "E6"; # base + layout-text-color = base05 + "E6"; # text + line-color = base00 + "E6"; # base + line-clear-color = base00 + "E6"; # base + line-caps-lock-color = base00 + "E6"; # base + line-ver-color = base00 + "E6"; # base + line-wrong-color = base00 + "E6"; # base + ring-color = base00 + "E6"; # base + ring-clear-color = base09 + "E6"; # peach + ring-caps-lock-color = base00 + "E6"; # base + ring-ver-color = base0B + "E6"; # green + ring-wrong-color = base00 + "E6"; # base + separator-color = "00000000"; # transparent + text-color = base05 + "E6"; # text + text-clear-color = base09 + "E6"; # peach + text-caps-lock-color = base0E + "E6"; # mauve + text-ver-color = base05 + "E6"; # text + text-wrong-color = base08 + "E6"; # red + }; + }; + + systemd.user.services.swaylock = { + Unit = { + After = [ "niri.service" ]; + PartOf = [ "niri.service" ]; + Description = "Screen locker"; + Documentation = "https://github.com/swaywm/swaylock"; + }; + + Service = { + ExecStart = "${config.programs.swaylock.package}/bin/swaylock"; + Restart = "on-failure"; + }; + + Install.WantedBy = [ "niri.service" ]; + }; + + xsession = { + enable = true; + windowManager.command = "niri"; + }; +} diff --git a/home/tiling/niri.nix b/home/sckova/tiling/niri.nix similarity index 80% rename from home/tiling/niri.nix rename to home/sckova/tiling/niri.nix index 470b1a2..a7d5490 100644 --- a/home/tiling/niri.nix +++ b/home/sckova/tiling/niri.nix @@ -1,6 +1,5 @@ { config, - pkgs, ... }: { @@ -17,7 +16,7 @@ XCURSOR_THEME = config.userOptions.cursor.name; XCURSOR_SIZE = toString config.userOptions.cursor.size; }; - screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"; + screenshot-path = "~/Pictures/Screenshots/%a %b %e %Y @%l:%M %p.png"; hotkey-overlay.skip-at-startup = true; prefer-no-csd = true; gestures.hot-corners.enable = false; @@ -29,7 +28,6 @@ input = { focus-follows-mouse.enable = true; focus-follows-mouse.max-scroll-amount = "0%"; - warp-mouse-to-focus.enable = true; mod-key = "Super"; keyboard = { numlock = false; @@ -50,13 +48,6 @@ }; }; outputs = { - "eDP-1" = { - scale = 1.5; - position = { - x = 272; - y = 1440; - }; - }; "HDMI-A-1" = { mode = { width = 3840; @@ -84,17 +75,13 @@ }; cursor = { hide-when-typing = false; - # hide-after-inactive-ms = 10000; size = config.userOptions.cursor.size; theme = config.userOptions.cursor.name; }; layout = { gaps = 4; - # background-color = base10; background-color = "transparent"; - default-column-width = { - proportion = 0.5; - }; + default-column-width.proportion = 0.5; preset-column-widths = [ { proportion = 4.0 / 12.0; } { proportion = 6.0 / 12.0; } @@ -103,16 +90,16 @@ border = { enable = true; width = 2; - active.color = config.scheme.withHashtag.${config.colors.accent}; - inactive.color = base01; - urgent.color = base12; + active.color = config.scheme.withHashtag.${config.colors.accent} + "E6"; + inactive.color = base01 + "E6"; + urgent.color = base12 + "E6"; }; focus-ring = { enable = false; width = 2; - active.color = config.scheme.withHashtag.${config.colors.accent}; - inactive.color = base01; - urgent.color = base12; + active.color = config.scheme.withHashtag.${config.colors.accent} + "E6"; + inactive.color = base01 + "E6"; + urgent.color = base12 + "E6"; }; shadow = { enable = true; @@ -122,12 +109,6 @@ softness = 30; color = base11 + "BF"; }; - # blur = { - # enable = true; - # passes = 4; - # radius = 4; - # noise = 0.1; - # }; }; window-rules = [ { @@ -138,30 +119,34 @@ bottom-right = 8.0; }; clip-to-geometry = true; - opacity = 1.0; - } - { - matches = [ - { - app-id = "firefox$"; - title = "^Picture-in-Picture$"; - } - ]; - open-floating = true; - default-floating-position = { - x = 16; - y = 16; - relative-to = "bottom-left"; + opacity = 0.90; + background-effect = { + xray = false; + blur = true; + noise = 0.05; + saturation = 1; }; + draw-border-with-background = false; } { matches = [ { app-id = "vesktop$"; } + { + app-id = "org.gnome.Nautilus$"; + } ]; block-out-from = "screen-capture"; } + { + matches = [ + { + is-active = false; + } + ]; + opacity = 0.90; + } { matches = [ { @@ -173,41 +158,98 @@ title = "Minecraft"; } ]; - open-maximized = true; + open-maximized-to-edges = true; open-focused = true; + opacity = 1.00; + } + { + matches = [ + { + app-id = "mpv"; + } + { + app-id = "firefox"; + title = "Picture-in-Picture"; + } + ]; + opacity = 1.0; + } + { + # Kitty Fastfetch window + matches = [ + { + app-id = "kitty"; + title = "^fastfetch$"; + } + ]; + open-floating = true; + baba-is-float = true; + min-width = 960; + min-height = 480; + max-width = 960; + max-height = 480; } ]; layer-rules = [ { - matches = [ - { - namespace = "^wpaperd.*"; - } - ]; + matches = [ { namespace = "^launcher$"; } ]; + background-effect = { + xray = false; + blur = true; + noise = 0.05; + saturation = 1; + }; + } + { + matches = [ { namespace = "^wallpaper$"; } ]; place-within-backdrop = true; } ]; binds = { "Mod+Shift+Slash".action.show-hotkey-overlay = { }; + "Mod+D" = { + action.toggle-window-rule-opacity = { }; + repeat = false; + }; + "Mod+M" = { + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; + hotkey-overlay.title = "Toggle Microphone Mute"; + repeat = false; + }; "Mod+T" = { action.spawn = [ "kitty" ]; hotkey-overlay.title = "Open a Terminal: kitty"; }; + "Mod+Shift+T" = { + action.spawn-sh = [ "kitty --title fastfetch sh -c 'fastfetch; sleep 10'" ]; + hotkey-overlay.title = "Open a Terminal with Fastfetch"; + }; "Mod+Space" = { action.spawn = [ "fuzzel" ]; - hotkey-overlay.title = "Run an Application: Noctalia app launcher"; + hotkey-overlay.title = "Run an Application: Fuzzel"; }; "XF86AudioRaiseVolume" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume increase" + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05+" ]; allow-when-locked = true; }; "XF86AudioLowerVolume" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume decrease" + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05-" ]; allow-when-locked = true; }; @@ -232,14 +274,20 @@ }; "MouseForward" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume increase" + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05+" ]; allow-when-locked = true; }; "MouseBack" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume decrease" + action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.05-" ]; allow-when-locked = true; }; @@ -264,14 +312,20 @@ }; "XF86AudioMute" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume muteOutput" + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" ]; allow-when-locked = true; }; "XF86AudioMicMute" = { - action.spawn-sh = [ - "noctalia-shell ipc call volume muteInput" + action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" ]; allow-when-locked = true; }; @@ -342,29 +396,14 @@ allow-when-locked = true; }; - "XF86Sleep" = { - action.power-off-monitors = { }; - }; + "XF86Sleep".action.power-off-monitors = { }; - "XF86Search" = { - action.spawn = [ - "noctalia-shell" - "ipc" - "call" - "launcher" - "toggle" - ]; - allow-when-locked = true; - }; + "XF86Search".action.spawn = [ "fuzzel" ]; + "Mod+Shift+L".action.spawn = [ "swaylock" ]; "XF86LaunchA" = { - action.spawn = [ - "niri" - "msg" - "action" - "toggle-overview" - ]; - allow-when-locked = true; + action.toggle-overview = { }; + repeat = false; }; "Mod+O" = { @@ -381,10 +420,6 @@ "Mod+Down".action.focus-window-down = { }; "Mod+Up".action.focus-window-up = { }; "Mod+Right".action.focus-column-right = { }; - "Mod+H".action.focus-column-left = { }; - "Mod+J".action.focus-window-down = { }; - "Mod+K".action.focus-window-up = { }; - "Mod+L".action.focus-column-right = { }; "Mod+Ctrl+Left".action.move-column-left = { }; "Mod+Ctrl+Down".action.move-window-down = { }; @@ -404,10 +439,6 @@ "Mod+Shift+Down".action.focus-monitor-down = { }; "Mod+Shift+Up".action.focus-monitor-up = { }; "Mod+Shift+Right".action.focus-monitor-right = { }; - "Mod+Shift+H".action.focus-monitor-left = { }; - "Mod+Shift+J".action.focus-monitor-down = { }; - "Mod+Shift+K".action.focus-monitor-up = { }; - "Mod+Shift+L".action.focus-monitor-right = { }; "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { }; "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { }; @@ -492,18 +523,15 @@ "Mod+Ctrl+Shift+F".action.fullscreen-window = { }; "Mod+C".action.center-column = { }; - "Mod+Ctrl+C".action.center-visible-columns = { }; "Mod+Minus".action.set-column-width = "-10%"; "Mod+Equal".action.set-column-width = "+10%"; - "Mod+Shift+Minus".action.set-window-height = "-10%"; "Mod+Shift+Equal".action.set-window-height = "+10%"; "Mod+Ctrl+Minus".action.set-column-width = "-0.25%"; "Mod+Ctrl+Equal".action.set-column-width = "+0.25%"; - "Mod+Ctrl+Shift+Minus".action.set-window-height = "-0.25%"; "Mod+Ctrl+Shift+Equal".action.set-window-height = "+0.25%"; @@ -512,18 +540,9 @@ "Mod+W".action.toggle-column-tabbed-display = { }; - "Print".action.screenshot = { - show-pointer = false; - }; - "Mod+Shift+S".action.screenshot = { - show-pointer = false; - }; - "Ctrl+Print".action.screenshot-screen = { - show-pointer = false; - }; - "Alt+Print".action.screenshot-window = { - show-pointer = false; - }; + "Mod+Shift+S".action.screenshot.show-pointer = false; + "Ctrl+Shift+S".action.screenshot-screen.show-pointer = false; + "Alt+Shift+S".action.screenshot-window.show-pointer = false; "Mod+Escape" = { action.toggle-keyboard-shortcuts-inhibit = { }; diff --git a/home/tiling/noctalia.nix b/home/sckova/tiling/noctalia.nix similarity index 95% rename from home/tiling/noctalia.nix rename to home/sckova/tiling/noctalia.nix index 719dda0..b88701c 100644 --- a/home/tiling/noctalia.nix +++ b/home/sckova/tiling/noctalia.nix @@ -63,12 +63,12 @@ bar = { autoHideDelay = 500; autoShowDelay = 150; - backgroundOpacity = 1; + backgroundOpacity = 0.90; monitors = [ ]; showCapsule = true; barType = "simple"; capsuleColorKey = "none"; - capsuleOpacity = 1; + capsuleOpacity = 0.90; displayMode = "always_visible"; floating = false; marginHorizontal = 5; @@ -79,7 +79,7 @@ outerCorners = false; screenOverrides = [ ]; showOutline = false; - useSeparateOpacity = false; + useSeparateOpacity = true; widgets = { center = [ ]; left = [ @@ -203,10 +203,10 @@ unreadBadgeColor = "primary"; } { - deviceNativePath = "__default__"; + deviceNativePath = ""; displayMode = "icon-hover"; hideIfIdle = false; - hideIfNotDetected = false; + hideIfNotDetected = true; id = "Battery"; showNoctaliaPerformance = false; showPowerProfiles = true; @@ -348,12 +348,13 @@ animationDisabled = false; animationSpeed = 1; autoStartAuth = false; - avatarImage = "/home/sckova/.face"; + avatarImage = "/home/${config.userOptions.username}/.face"; boxRadiusRatio = 1; clockFormat = "hh\\nmm"; clockStyle = "custom"; compactLockScreen = false; dimmerOpacity = 0.5; + enableBlurBehind = true; enableLockScreenCountdown = true; enableShadows = false; forceBlackScreenCorners = false; @@ -423,7 +424,7 @@ }; notifications = { - backgroundOpacity = 1; + backgroundOpacity = 0.90; criticalUrgencyDuration = 15; enableBatteryToast = true; enableKeyboardLayoutToast = true; @@ -549,7 +550,7 @@ fontFixed = "FiraMono Nerd Font Mono"; fontFixedScale = 1; networkPanelView = "wifi"; - panelBackgroundOpacity = 1; + panelBackgroundOpacity = 0.90; panelsAttachedToBar = true; settingsPanelMode = "attached"; tooltipsEnabled = true; @@ -558,7 +559,7 @@ wallpaper = { automationEnabled = false; - directory = "/home/sckova/.local/share/wallpaper"; + directory = "/home/${config.userOptions.username}/.local/share/wallpaper"; enableMultiMonitorDirectories = false; enabled = false; fillColor = "#1e1e2e"; @@ -598,23 +599,19 @@ After = [ "niri.service" ]; PartOf = [ "niri.service" ]; Description = "Noctalia Shell - Wayland desktop shell"; - Documentation = "https://docs.noctalia.dev/docs"; + Documentation = "https://docs.noctalia.dev"; + X-Restart-Triggers = [ + "${config.xdg.configFile."noctalia/settings.json".source}" + "${config.xdg.configFile."noctalia/colors.json".source}" + ]; }; Service = { ExecStart = "${pkgs.noctalia-shell}/bin/noctalia-shell"; Restart = "on-failure"; - Environment = [ - "LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale" - "TZDIR=${pkgs.tzdata}/share/zoneinfo" - "NOCTALIA_SETTINGS_FALLBACK=%h/.config/noctalia/gui-settings.json" - "QT_QPA_PLATFORM=wayland" - "QT_QPA_PLATFORMTHEME=qt6ct" - ]; + Environment = [ "QT_QPA_PLATFORMTHEME=qt6ct" ]; }; - Install = { - WantedBy = [ "niri.service" ]; - }; + Install.WantedBy = [ "niri.service" ]; }; } diff --git a/home/sckova/tiling/wallpaper.nix b/home/sckova/tiling/wallpaper.nix new file mode 100644 index 0000000..958cb97 --- /dev/null +++ b/home/sckova/tiling/wallpaper.nix @@ -0,0 +1,107 @@ +{ + pkgs, + config, + ... +}: +{ + systemd.user.services.wbg-daemon = { + Unit.Description = "Wallpaper service using wbg (daemon)"; + Service.ExecStart = '' + ${pkgs.wbg}/bin/wbg -s \ + %h/.local/share/wallpaper/daily-colored.jpg + ''; + Install.WantedBy = [ "niri.service" ]; + }; + + systemd.user.services.bing-wallpaper = { + Unit.Description = "Download and set Bing wallpaper of the day"; + Unit.StartLimitBurst = 6; + Unit.StartLimitIntervalSec = "10m"; + Service.Restart = "on-failure"; + Service.RestartSec = "10s"; + Service.Type = "oneshot"; + Service.ExecStart = pkgs.lib.getExe ( + pkgs.writeShellApplication { + name = "bing-wallpaper"; + runtimeInputs = with pkgs; [ + wget + jq + coreutils + libnotify + ]; + text = '' + OUT="$HOME/.local/share/wallpaper/daily.jpg" + API=$(wget -qO- "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&mkt=en-US&n=1") + BASE=$(echo "$API" | jq -r '.images[0].urlbase') + TITLE=$(echo "$API" | jq -r '.images[0].title') + + mkdir -p "$HOME/.local/share/wallpaper" + wget -qO "$OUT" "https://www.bing.com''${BASE}_UHD.jpg" + + notify-send \ + -a "Wallpaper of the day" \ + -u low \ + -i preferences-desktop-wallpaper \ + "$TITLE" + ''; + } + ); + Service.ExecStartPost = "${pkgs.systemd}/bin/systemctl --user start gowall-convert.service"; + Install.WantedBy = [ "niri.service" ]; + }; + + systemd.user.timers.bing-wallpaper = { + Unit.Description = "Run bing wallpaper retrieval daily"; + Timer.OnCalendar = "*-*-* 10:00:00 GMT"; + Timer.Persistent = true; + Install.WantedBy = [ "timers.target" ]; + }; + + systemd.user.services.gowall-convert = { + Unit.Description = "Convert a wallpaper to the system color scheme"; + Unit.StartLimitBurst = 6; + Unit.StartLimitIntervalSec = "10m"; + Service.Restart = "on-failure"; + Service.RestartSec = "10s"; + Service.Type = "oneshot"; + Service.ExecStart = '' + ${pkgs.gowall}/bin/gowall convert \ + %h/.local/share/wallpaper/daily.jpg \ + --output %h/.local/share/wallpaper/daily-colored.jpg \ + -t nix + ''; + Service.ExecStartPost = "${pkgs.systemd}/bin/systemctl --user restart wbg-daemon.service"; + }; + + home.file.".config/gowall/config.yml".text = with config.scheme.withHashtag; '' + themes: + - name: "nix" + colors: + - "${base06}" + - "${base0F}" + - "${base17}" + - "${base0E}" + - "${base08}" + - "${base12}" + - "${base09}" + - "${base0A}" + - "${base0B}" + - "${base0C}" + - "${base15}" + - "${base16}" + - "${base0D}" + - "${base07}" + - "${base05}" + - "${base07}" + - "${base0D}" + - "${base0D}" + - "${base04}" + - "${base04}" + - "${base04}" + - "${base03}" + - "${base02}" + - "${base00}" + - "${base01}" + - "${base11}" + ''; +} diff --git a/home/services/default.nix b/home/services/default.nix deleted file mode 100644 index d38c136..0000000 --- a/home/services/default.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ - config, - pkgs, - ... -}: -{ - imports = [ - ./gtk.nix - ./qt.nix - ./systemd.nix - ]; - - home.file = { - ".icons/default/index.theme" = { - text = '' - [Icon Theme] - Name=Default - Comment=Default Cursor Theme - Inherits=${config.userOptions.cursor.name} - ''; - force = true; - }; - }; - - home.pointerCursor = { - gtk.enable = true; - name = config.userOptions.cursor.name; - package = config.userOptions.cursor.package; - size = config.userOptions.cursor.size; - }; - - home.sessionVariables = { - QT_QPA_PLATFORMTHEME = "qt6ct"; - }; - - gtk = { - enable = true; - - # colorScheme = if config.userOptions.isDark then "dark" else "light"; - - # theme = { - # package = pkgs.kdePackages.breeze-gtk; - # name = - # if config.userOptions.isDark - # then "Breeze-Dark" - # else "Breeze"; - # }; - - # iconTheme = { - # name = if config.userOptions.isDark then "Colloid-Dark" else "Colloid-Light"; - # package = pkgs.colloid-icon-theme; - # }; - - colorScheme = "dark"; - iconTheme = { - name = "Colloid-Dark"; - package = pkgs.colloid-icon-theme; - }; - - cursorTheme = { - name = config.home.pointerCursor.name; - package = config.home.pointerCursor.package; - size = config.home.pointerCursor.size; - }; - - gtk3.extraConfig = { - gtk-application-prefer-dark-theme = true; - gtk-decoration-layout = ":"; - }; - - gtk4.extraConfig = { - gtk-application-prefer-dark-theme = true; - gtk-decoration-layout = ":"; - }; - }; -} diff --git a/home/services/systemd.nix b/home/services/systemd.nix deleted file mode 100644 index 5dd3a94..0000000 --- a/home/services/systemd.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: -{ - systemd.user.sessionVariables = { - XCURSOR_THEME = config.userOptions.cursor.name; - XCURSOR_SIZE = toString config.userOptions.cursor.size; - XCURSOR_PATH = config.userOptions.cursor.path; - }; - - xdg.configFile."rclone/synology.conf".text = '' - [synology] - type = sftp - user = sckova - host = nas.taila30609.ts.net - key_file = ~/.ssh/key - shell_type = unix - root = home - md5sum_command = "${pkgs.coreutils}/bin/md5sum"; - sha1sum_command = "${pkgs.coreutils}/bin/sha1sum"; - ''; - - systemd.user.services.synology-mount = { - Unit = { - Description = "Mount Synology NAS with Rclone and Home Manager."; - After = [ "tailscaled.service" ]; - Wants = [ "tailscaled.service" ]; - }; - - Service = { - Type = "simple"; - # ExecStartPre = "${pkgs.writeShellScript "synology-prep" '' - # if mountpoint -q %h/Synology; then - # /run/wrappers/bin/fusermount -uz %h/Synology - # fi - # ${pkgs.coreutils}/bin/mkdir -p %h/Synology - # ''}"; - ExecStart = "${pkgs.writeShellScript "synology-mount" '' - #!/usr/bin/env bash - set -euo pipefail - - # Ensure mount point exists - mkdir -p $HOME/Synology || true - - # Unmount stale mount if present - /run/wrappers/bin/umount "$HOME/Synology" || true - - # Mount rclone in foreground - ${pkgs.rclone}/bin/rclone \ - --config=$HOME/.config/rclone/synology.conf \ - --ignore-checksum \ - --log-level INFO \ - --rc --rc-serve \ - mount "synology:" "$HOME/Synology" - ''}"; - ExecStop = "/run/wrappers/bin/fusermount -uz %h/Synology/%i"; - StandardOutput = "journal"; - StandardError = "journal"; - }; - - Install = { - WantedBy = [ "default.target" ]; - }; - }; - - # systemd.user.services.synology-prefill = { - # Unit = { - # Description = "Prefill Synology NAS rclone cache"; - # After = [ "synology-mount.service" ]; - # Wants = [ "synology-mount.service" ]; - # }; - - # Service = { - # Type = "simple"; - # ExecStart = "${pkgs.writeShellScript "synology-prefill" '' - # #!/usr/bin/env bash - # set -euo pipefail - # ${pkgs.rclone}/bin/rclone rc vfs/refresh -v --fast-list recursive=true >/dev/null - # ''}"; - # StandardOutput = "journal"; - # StandardError = "journal"; - # Restart = "on-failure"; - # }; - - # Install = { - # WantedBy = [ "default.target" ]; - # }; - # }; - - # systemd.user.services.input-leap = { - # Unit = { - # Description = "Autostart Input Leap"; - # After = [ "graphical-session.target" ]; - # }; - - # Service = { - # Type = "oneshot"; - # RemainAfterExit = true; - # PassEnvironment = "DISPLAY"; - # ExecStart = "${pkgs.writeShellScript "input-leap-start" '' - # sleep 5 - # ${pkgs.input-leap}/bin/input-leap - # ''}"; - # }; - - # Install = { - # WantedBy = [ "graphical-session.target" ]; - # }; - # }; -} diff --git a/home/terminal/btop.nix b/home/terminal/btop.nix deleted file mode 100644 index 64d5fe1..0000000 --- a/home/terminal/btop.nix +++ /dev/null @@ -1,110 +0,0 @@ -{ - config, - pkgs, - ... -}: -let - btop-colors = with config.scheme.withHashtag; '' - # Credit to https://github.com/catppuccin/btop - # Main background, empty for terminal default, need to be empty if you want transparent background - theme[main_bg]="${base00}" - - # Main text color - theme[main_fg]="${base05}" - - # Title color for boxes - theme[title]="${base05}" - - # Highlight color for keyboard shortcuts - theme[hi_fg]="${base0D}" - - # Background color of selected item in processes box - theme[selected_bg]="${base02}" - - # Foreground color of selected item in processes box - theme[selected_fg]="${base0D}" - - # Color of inactive/disabled text - theme[inactive_fg]="${base03}" - - # Color of text appearing on top of graphs, i.e uptime and current network graph scaling - theme[graph_text]="${base06}" - - # Background color of the percentage meters - theme[meter_bg]="${base02}" - - # Misc colors for processes box including mini cpu graphs, details memory graph and details status text - theme[proc_misc]="${base06}" - - # CPU, Memory, Network, Proc box outline colors - theme[cpu_box]="${base0E}" #Mauve - theme[mem_box]="${base0B}" #Green - theme[net_box]="${base12}" #Maroon - theme[proc_box]="${base0D}" #Blue - - # Box divider line and small boxes line color - theme[div_line]="${base03}" - - # Temperature graph color (Green -> Yellow -> Red) - theme[temp_start]="${base0B}" - theme[temp_mid]="${base0A}" - theme[temp_end]="${base08}" - - # CPU graph colors (Teal -> Lavender) - theme[cpu_start]="${base0C}" - theme[cpu_mid]="${base16}" - theme[cpu_end]="${base07}" - - # Mem/Disk free meter (Mauve -> Lavender -> Blue) - theme[free_start]="${base0E}" - theme[free_mid]="${base07}" - theme[free_end]="${base0D}" - - # Mem/Disk cached meter (Sapphire -> Lavender) - theme[cached_start]="${base16}" - theme[cached_mid]="${base0D}" - theme[cached_end]="${base07}" - - # Mem/Disk available meter (Peach -> Red) - theme[available_start]="${base09}" - theme[available_mid]="${base12}" - theme[available_end]="${base08}" - - # Mem/Disk used meter (Green -> Sky) - theme[used_start]="${base0B}" - theme[used_mid]="${base0C}" - theme[used_end]="${base15}" - - # Download graph colors (Peach -> Red) - theme[download_start]="${base09}" - theme[download_mid]="${base12}" - theme[download_end]="${base08}" - - # Upload graph colors (Green -> Sky) - theme[upload_start]="${base0B}" - theme[upload_mid]="${base0C}" - theme[upload_end]="${base15}" - - # Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve) - theme[process_start]="${base16}" - theme[process_mid]="${base07}" - theme[process_end]="${base0E}" - ''; - - btop-colors-file = pkgs.writeTextFile { - name = "btop-colors"; - text = btop-colors; - destination = "/nixos.theme"; - }; - - mergedConfig = pkgs.runCommand "mergedConfig" { } '' - mkdir -p $out/themes - cp -r ${btop-colors-file}/nixos.theme $out/themes/nixos.theme - ''; -in -{ - home.file.".config/btop" = { - source = mergedConfig; - recursive = true; - }; -} diff --git a/home/terminal/default.nix b/home/terminal/default.nix deleted file mode 100644 index 379f1df..0000000 --- a/home/terminal/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ - imports = [ - ./btop.nix - ./fish.nix - ./kitty.nix - ./neovim.nix - ]; -} diff --git a/home/terminal/fish_functions/logout.fish b/home/terminal/fish_functions/logout.fish deleted file mode 100644 index 9dcc3e0..0000000 --- a/home/terminal/fish_functions/logout.fish +++ /dev/null @@ -1,5 +0,0 @@ -if status is-login - builtin exit -else - /run/current-system/sw/bin/qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout -end diff --git a/home/terminal/kitty.nix b/home/terminal/kitty.nix deleted file mode 100644 index b6525dc..0000000 --- a/home/terminal/kitty.nix +++ /dev/null @@ -1,141 +0,0 @@ -{ - config, - pkgs, - ... -}: -let - # Map Catppuccin colors to Kitty theme structure - kitty-colors = with config.scheme.withHashtag; '' - # vim:ft=kitty - ## name: Kova's Nixified Kitty - ## author: Catppuccin Org & sckova - ## license: MIT - ## upstream: https://github.com/catppuccin/kitty - ## blurb: The theme generated from the NixOS configuration! - - # The basic colors - foreground ${base05} - background ${base00} - selection_foreground ${base00} - selection_background ${base06} - - # Cursor colors - cursor ${base06} - cursor_text_color ${base00} - - # URL underline color when hovering with mouse - url_color ${base06} - - # Kitty window border colors - active_border_color ${config.scheme.withHashtag.${config.colors.accent}} - inactive_border_color ${base01} - bell_border_color ${base12} - - # Tab bar colors - active_tab_foreground ${base11} - active_tab_background ${config.scheme.withHashtag.${config.colors.accent}} - inactive_tab_foreground ${base05} - inactive_tab_background ${base10} - tab_bar_background ${base11} - - # Colors for marks (marked text in the terminal) - mark1_foreground ${base00} - mark1_background ${base09} - mark2_foreground ${base00} - mark2_background ${base0D} - mark3_foreground ${base00} - mark3_background ${base15} - - # The 16 terminal colors - # black - color0 ${base02} - color8 ${base02} - - # red - color1 ${base08} - color9 ${base08} - - # green - color2 ${base0B} - color10 ${base0B} - - # yellow - color3 ${base0A} - color11 ${base0A} - - # blue - color4 ${base0D} - color12 ${base0D} - - # magenta - color5 ${base17} - color13 ${base17} - - # cyan - color6 ${base0C} - color14 ${base0C} - - # white - color7 ${base04} - color15 ${base04} - ''; - - kitty-colors-file = pkgs.writeTextFile { - name = "kitty-colors"; - text = kitty-colors; - destination = "/kitty-colors.conf"; - }; -in -{ - home.file.".config/kitty/themes" = { - source = kitty-colors-file; - recursive = true; - }; - - home.file.".config/kitty/ssh.conf" = { - text = '' - shell_integration inherited - ''; - }; - - programs = { - kitty = { - enable = true; - enableGitIntegration = true; - font = { - name = config.userOptions.fontMono.name; - size = config.userOptions.fontMono.size; - }; - shellIntegration.enableFishIntegration = true; - keybindings = { - "ctrl+k" = "combine : clear_terminal scroll active : clear_terminal scrollback active"; - }; - settings = { - include = "/home/${config.userOptions.username}/.config/kitty/themes/kitty-colors.conf"; - scrollback_lines = 10000; - wheel_scroll_multiplier = 5.0; - touch_scroll_multiplier = 5.0; - enable_audio_bell = false; - update_check_interval = 0; - confirm_os_window_close = 0; - window_padding_width = 4; - tab_bar_min_tabs = 2; - tab_bar_edge = "top"; - tab_bar_style = "powerline"; - tab_powerline_style = "slanted"; - mouse_hide_wait = "-1.0"; - wayland_titlebar_color = "system"; - macos_titlebar_color = "system"; - }; - }; - bat = { - enable = true; - # config.theme = "Catppuccin ${config.catppuccinUpper.flavor}"; - }; - lazygit = { - enable = true; - enableFishIntegration = true; - }; - lazysql.enable = true; - }; -} diff --git a/home/tiling/default.nix b/home/tiling/default.nix deleted file mode 100644 index 985b5fa..0000000 --- a/home/tiling/default.nix +++ /dev/null @@ -1,121 +0,0 @@ -{ pkgs, config, ... }: -{ - imports = [ - ./niri.nix - ./noctalia.nix - ./wallpaper.nix - ]; - - home.packages = with pkgs; [ - xdg-desktop-portal - brightnessctl - qt6Packages.qt6ct - libsForQt5.qt5ct - catppuccin-qt5ct - xwayland-satellite - playerctl - ]; - - programs.fuzzel = { - enable = true; - package = pkgs.fuzzel; - settings = { - main = { - terminal = "${pkgs.kitty}/bin/kitty"; - layer = "overlay"; - font = with config.userOptions.fontMono; name + ":size=" + toString (size + 2); - launch-prefix = "${pkgs.niri}/bin/niri msg action spawn --"; - icon-theme = "Colloid-Dark"; - }; - border = { - width = 2; - radius = 8; - }; - colors = with config.scheme; { - background = base00 + "ff"; - text = base05 + "ff"; - prompt = base04 + "ff"; - placeholder = base04 + "ff"; - input = base05 + "ff"; - match = config.scheme.withHashtag.${config.colors.accent} + "ff"; - selection = base04 + "ff"; - selection-text = base00 + "ff"; - counter = base04 + "ff"; - border = config.scheme.withHashtag.${config.colors.accent} + "ff"; - }; - }; - }; - - xsession = { - enable = true; - windowManager.command = "niri"; - }; - - xdg.mimeApps = { - enable = true; - associations.added = { - "x-scheme-handler/http" = [ "firefox.desktop" ]; - "x-scheme-handler/https" = [ "firefox.desktop" ]; - "x-scheme-handler/discord" = [ "vesktop.desktop" ]; - "x-scheme-handler/spotify" = [ "riff.desktop" ]; - "inode/directory" = [ "org.gnome.Nautilus.desktop" ]; - "image/png" = [ "loupe.desktop" ]; - "image/jpeg" = [ "loupe.desktop" ]; - }; - defaultApplications = { - # Web - "x-scheme-handler/http" = [ "firefox.desktop" ]; - "x-scheme-handler/https" = [ "firefox.desktop" ]; - "text/html" = [ "firefox.desktop" ]; - - # Communication & Social - "x-scheme-handler/discord" = [ "vesktop.desktop" ]; - "x-scheme-handler/spotify" = [ "riff.desktop" ]; - - # File Management - "inode/directory" = [ "org.gnome.Nautilus.desktop" ]; - - # Torrents - "application/x-bittorrent" = [ "org.qbittorrent.qBittorrent.desktop" ]; - "x-scheme-handler/magnet" = [ "org.qbittorrent.qBittorrent.desktop" ]; - - # Documents - "application/pdf" = [ "firefox.desktop" ]; # Or libreoffice-draw.desktop - "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = [ - "libreoffice-writer.desktop" - ]; # docx - "application/msword" = [ "libreoffice-writer.desktop" ]; # doc - "application/vnd.oasis.opendocument.text" = [ "libreoffice-writer.desktop" ]; # odt - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = [ - "libreoffice-calc.desktop" - ]; # xlsx - "application/vnd.ms-excel" = [ "libreoffice-calc.desktop" ]; # xls - "application/vnd.oasis.opendocument.spreadsheet" = [ "libreoffice-calc.desktop" ]; # ods - - # Text & Code - "text/plain" = [ "nvim.desktop" ]; - "text/markdown" = [ "nvim.desktop" ]; - "application/x-shellscript" = [ "nvim.desktop" ]; - "application/json" = [ "nvim.desktop" ]; - "text/x-c" = [ "nvim.desktop" ]; - "text/x-c++" = [ "nvim.desktop" ]; - "text/x-python" = [ "nvim.desktop" ]; - "text/x-makefile" = [ "nvim.desktop" ]; - - # Media - "video/mp4" = [ "mpv.desktop" ]; - "video/mkv" = [ "mpv.desktop" ]; - "video/webm" = [ "mpv.desktop" ]; - "audio/mpeg" = [ "mpv.desktop" ]; - "audio/flac" = [ "mpv.desktop" ]; - "audio/wav" = [ "mpv.desktop" ]; - - # Images - "image/png" = [ "loupe.desktop" ]; - "image/jpeg" = [ "loupe.desktop" ]; - "image/webp" = [ "loupe.desktop" ]; - "image/gif" = [ "loupe.desktop" ]; - }; - }; - -} diff --git a/home/tiling/wallpaper.nix b/home/tiling/wallpaper.nix deleted file mode 100644 index 47377f7..0000000 --- a/home/tiling/wallpaper.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - pkgs, - config, - ... -}: -{ - home.packages = with pkgs; [ - wpaperd - ]; - - home.file.".config/wpaperd/config.toml" = { - text = '' - [default] - mode = "center" - [any] - path = "/home/${config.userOptions.username}/.local/share/wallpaper/daily.jpg" - ''; - force = true; - }; - - systemd.user.services.wpaperd = { - Unit = { - Description = "Modern wallpaper daemon for Wayland"; - PartOf = [ "niri.service" ]; - Requires = [ "niri.service" ]; - After = [ "niri.service" ]; - }; - Service = { - ExecStart = "${pkgs.wpaperd}/bin/wpaperd"; - }; - Install = { - WantedBy = [ "niri.service" ]; - }; - }; - - systemd.user.services.bing-wallpaper = { - Unit = { - Description = "Download and set Bing wallpaper of the day"; - After = [ "network-online.target" ]; - Wants = [ "network-online.target" ]; - }; - Service = { - Type = "oneshot"; - ExecStart = pkgs.writeShellScript "bing-wallpaper" '' - OUT="''${XDG_DATA_HOME:-$HOME/.local/share}/wallpaper/daily.jpg" - - API_RESP=$(${pkgs.wget}/bin/wget -qO- "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&mkt=en-US&n=1") || exit 1 - - URL_BASE=$(echo "$API_RESP" | ${pkgs.gnugrep}/bin/grep -oP 'urlbase":"[^"]*' | cut -d '"' -f 3) - TITLE=$(echo "$API_RESP" | ${pkgs.gnugrep}/bin/grep -oP 'title":"[^"]*' | cut -d '"' -f 3) - - ${pkgs.coreutils}/bin/mkdir -p "$(dirname "$OUT")" - ${pkgs.wget}/bin/wget -qO "$OUT" "https://www.bing.com$URL_BASE\_UHD.jpg" || \ - ${pkgs.wget}/bin/wget -qO "$OUT" "https://www.bing.com$(echo "$API_RESP" | ${pkgs.gnugrep}/bin/grep -oP 'url":"[^"]*' | cut -d '"' -f 3)" - - ${pkgs.libnotify}/bin/notify-send \ - -a "Bing Wallpaper Service" \ - -u low \ - -i preferences-desktop-wallpaper \ - "$TITLE" - ''; - ExecStartPost = "${pkgs.systemd}/bin/systemctl --user restart wpaperd.service"; - }; - Install = { - WantedBy = [ "niri.service" ]; - }; - }; - - systemd.user.timers.bing-wallpaper = { - Unit = { - Description = "Run bing wallpaper retrieval daily"; - }; - Timer = { - OnCalendar = "*-*-* 10:00:00 GMT"; - Persistent = true; - }; - Install = { - WantedBy = [ "timers.target" ]; - }; - }; -} diff --git a/options.nix b/options.nix index 910e25f..94e6dfa 100644 --- a/options.nix +++ b/options.nix @@ -16,33 +16,22 @@ default = "base09"; }; }; - # catppuccinUpper = { - # accent = lib.mkOption { - # type = lib.types.str; - # readOnly = true; - # default = - # builtins.substring 0 1 (lib.toUpper config.catppuccin.accent) - # + builtins.substring 1 (-1) config.catppuccin.accent; - # }; - # flavor = lib.mkOption { - # type = lib.types.str; - # readOnly = true; - # default = - # builtins.substring 0 1 (lib.toUpper config.catppuccin.flavor) - # + builtins.substring 1 (-1) config.catppuccin.flavor; - # }; - # }; userOptions = { name = lib.mkOption { type = lib.types.str; - readOnly = true; + readOnly = false; default = "Sean Kovacs"; }; username = lib.mkOption { type = lib.types.str; - readOnly = true; + readOnly = false; default = "sckova"; }; + email = lib.mkOption { + type = lib.types.str; + readOnly = false; + default = "kovacsmillio@gmail.com"; + }; hostname = lib.mkOption { type = lib.types.str; readOnly = true; @@ -116,32 +105,36 @@ default = pkgs.noto-fonts-color-emoji; }; }; - cursor = - let - attrName = "mocha" + "Peach"; - in - { - name = lib.mkOption { - type = lib.types.str; - readOnly = true; - default = "catppuccin-mocha-peach-cursors"; - }; - package = lib.mkOption { - type = lib.types.package; - readOnly = true; - default = pkgs.catppuccin-cursors.${attrName}; - }; - size = lib.mkOption { - type = lib.types.int; - readOnly = true; - default = 24; - }; - path = lib.mkOption { - type = lib.types.str; - readOnly = true; - default = "${pkgs.catppuccin-cursors.${attrName}}/share/icons"; - }; + cursor = { + name = lib.mkOption { + type = lib.types.str; + readOnly = true; + default = config.colors.scheme; }; + package = lib.mkOption { + type = lib.types.package; + readOnly = true; + default = + with config.scheme; + (pkgs.bibata-cursor.override { + themeName = config.colors.scheme; + baseColor = withHashtag.${config.colors.accent}; + outlineColor = withHashtag.base00; + watchBackgroundColor = withHashtag.base11; + cursorSizes = "16 20 22 24 28 32 40 48 56 64 72 80 88 96"; + }); + }; + size = lib.mkOption { + type = lib.types.int; + readOnly = true; + default = 24; + }; + path = lib.mkOption { + type = lib.types.str; + readOnly = true; + default = "${config.userOptions.cursor.package}/share/icons/${config.colors.scheme}"; + }; + }; # isDark = lib.mkOption { # type = lib.types.bool; # readOnly = true; diff --git a/packages/bibata-cursor/default.nix b/packages/bibata-cursor/default.nix new file mode 100644 index 0000000..edb61cb --- /dev/null +++ b/packages/bibata-cursor/default.nix @@ -0,0 +1,103 @@ +{ + pkgs ? import { }, + themeName ? "bibata", + baseColor ? "#000000", + outlineColor ? "#FFFFFF", + watchBackgroundColor ? "", + cursorSizes ? "24", +}: + +let + version = "2.0.7"; + + src = pkgs.fetchFromGitHub { + owner = "ful1e5"; + repo = "Bibata_Cursor"; + rev = "v${version}"; + hash = "sha256-kIKidw1vditpuxO1gVuZeUPdWBzkiksO/q2R/+DUdEc="; + }; + + yarnOfflineCache = pkgs.fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + hash = "sha256-EpWIGoFFokmzRML2r/dCM+TImOCtii8mifLgnLKdUMY="; + }; + +in +pkgs.stdenv.mkDerivation { + pname = "bibata-${themeName}-cursor"; + inherit version src; + + nativeBuildInputs = with pkgs; [ + yarn + nodejs + fixup-yarn-lock + python3Packages.clickgen + autoPatchelfHook + ]; + + buildInputs = with pkgs; [ + # Required to satisfy dynamic linking for prebuilt JS native modules (like resvg-js) + stdenv.cc.cc.lib + ]; + + configurePhase = '' + runHook preConfigure + + export HOME=$(mktemp -d) + + echo "1. Setup offline yarn cache" + yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} + fixup-yarn-lock yarn.lock + + echo "2. Install node_modules offline" + yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive + patchShebangs node_modules/ + + rm -rf node_modules/@resvg/resvg-js-linux-*-musl + + echo "3. Patch prebuilt node binaries (like resvg) so they can run in the Nix sandbox" + autoPatchelf node_modules/ + + # https://github.com/ful1e5/cbmp/issues/4 + echo "4. Patch 'ora' library to prevent Nix sandbox hangs" + sed -i 's/this.#isEnabled = .*/this.#isEnabled = false;/g' node_modules/ora/index.js + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + + echo "Splitting SVGs to render across $NIX_BUILD_CORES cores..." + + echo "1. Distribute SVGs evenly into chunk directories" + if [ -n "${watchBackgroundColor}" ]; then + ./node_modules/.bin/cbmp -d "svg" -o "bitmaps/${themeName}" -bc "${baseColor}" -oc "${outlineColor}" -wc "${watchBackgroundColor}" + else + ./node_modules/.bin/cbmp -d "svg" -o "bitmaps/${themeName}" -bc "${baseColor}" -oc "${outlineColor}" + fi + + echo "Rendering complete. Building XCursor theme..." + + echo "4. Build the final cursors" + ctgen configs/normal/x.build.toml -s ${cursorSizes} -p x11 -d "bitmaps/${themeName}" -n "${themeName}" -c "${themeName} cursors" + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -dm 0755 $out/share/icons + cp -r themes/${themeName} $out/share/icons/ + + runHook postInstall + ''; + + meta = with pkgs.lib; { + description = "Custom colored Bibata Cursor theme built from source"; + homepage = "https://github.com/ful1e5/Bibata_Cursor"; + license = licenses.gpl3; + platforms = platforms.linux; + }; +} diff --git a/packages/catppuccin-discord/default.nix b/packages/catppuccin-discord/default.nix deleted file mode 100644 index ec4105e..0000000 --- a/packages/catppuccin-discord/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - lib, - stdenv, - fetchYarnDeps, - yarn, - nodejs, - fixup-yarn-lock, - nodePackages, - catppuccin-discord-git, -}: -stdenv.mkDerivation rec { - pname = "catppuccin-discord"; - version = "unstable-${catppuccin-discord-git.rev}"; - - src = catppuccin-discord-git; - - yarnOfflineCache = fetchYarnDeps { - yarnLock = "${src}/yarn.lock"; - hash = "sha256-BhE3aKyA/LBErjWx+lbEVb/CIXhqHkXbV+9U2djIBhs="; - }; - - nativeBuildInputs = [ - yarn - nodejs - fixup-yarn-lock - nodePackages.sass - ]; - - postPatch = '' - substituteInPlace package.json \ - --replace-fail "--no-charset --no-source-map" "" - ''; - - configurePhase = '' - export HOME=$TMPDIR - yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} - fixup-yarn-lock yarn.lock - yarn install --offline --frozen-lockfile --ignore-scripts --ignore-platform - ''; - - buildPhase = '' - yarn --offline release - ''; - - installPhase = '' - mkdir -p $out/share/catppuccin-discord - cp -r dist/dist/* $out/share/catppuccin-discord/ - ''; - - meta = { - description = "Soothing pastel theme for Discord"; - homepage = "https://github.com/catppuccin/discord"; - license = lib.licenses.mit; - platforms = lib.platforms.all; - }; -} diff --git a/packages/kvlibadwaita/default.nix b/packages/kvlibadwaita/default.nix deleted file mode 100644 index 3d729dd..0000000 --- a/packages/kvlibadwaita/default.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - lib, - stdenvNoCC, - kvlibadwaita-git, - colorScheme ? null, -}: - -stdenvNoCC.mkDerivation { - pname = "kvlibadwaita"; - version = "git"; - - # Pulls from the flake-provided git variable - src = kvlibadwaita-git; - - # We take the colors as an input but do nothing with them yet per your instructions. - # They are passed into the derivation environment just in case, but unused for now. - passthru = { - inherit colorScheme; - }; - - # Standard phases are skipped for pure file-copying derivations to save time - dontConfigure = true; - dontBuild = true; - - installPhase = '' - runHook preInstall - - # Recreate the exact requested directory structure in the output - mkdir -p $out/src/Colors - mkdir -p $out/src/KvLibadwaita - - # Export Colors - cp "src/Colors/Libadwaita Dark.colors" "$out/src/Colors/" - cp "src/Colors/Libadwaita Light.colors" "$out/src/Colors/" - - # Export KvLibadwaita files - cp "src/KvLibadwaita/KvLibadwaita.kvconfig" "$out/src/KvLibadwaita/" - cp "src/KvLibadwaita/KvLibadwaita.svg" "$out/src/KvLibadwaita/" - cp "src/KvLibadwaita/KvLibadwaitaDark.kvconfig" "$out/src/KvLibadwaita/" - cp "src/KvLibadwaita/KvLibadwaitaDark.svg" "$out/src/KvLibadwaita/" - - runHook postInstall - ''; - - meta = with lib; { - description = "Libadwaita theme for Kvantum"; - homepage = "https://github.com/GabePoel/kvlibadwaita"; # Update if pointing to a specific fork - license = licenses.gpl3Only; - platforms = platforms.linux; - }; -} diff --git a/packages/overlay.nix b/packages/overlay.nix index 9850c55..5346aea 100644 --- a/packages/overlay.nix +++ b/packages/overlay.nix @@ -1,15 +1,8 @@ final: prev: { spotify-webapp = final.callPackage ./spotify-webapp { }; + bibata-cursor = final.callPackage ./bibata-cursor { }; - catppuccin-discord = final.callPackage ./catppuccin-discord { - inherit (final) catppuccin-discord-git; - }; - - kvlibadwaita = final.callPackage ./kvlibadwaita { - inherit (final) kvlibadwaita-git; - }; - - openmw = prev.openmw.overrideAttrs (oldAttrs: { + openmw-unstable = prev.openmw.overrideAttrs (oldAttrs: { pname = "openmw"; src = final.openmw-git; version = "${final.openmw-git.rev}"; diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml new file mode 100644 index 0000000..915cf47 --- /dev/null +++ b/secrets/secrets.yaml @@ -0,0 +1,51 @@ +#ENC[AES256_GCM,data:TggQPAlRHvMKs5nMF7arHHoXjj6+1c0n1DuIS5UFXuRob9E2AHn3JCObcPW/IH0JOcg=,iv:PFDAr1ZQMu158TglCPFqK548LfOtYHT+7zon83JN8IY=,tag:72fhZeqDG7yK+pv1k330zA==,type:comment] +searxng_secret: ENC[AES256_GCM,data:j/PY84sAXdcP/WaekjhT+wYDa1Q9OBWchrAUKpW7ygSEMqbiIx5i/bmjyqjifnZqKvy/hgF/SA2ZbFKsQ5jjpQ==,iv:8Sv9WTjO+Vkrgmd+V6l7vdMPPtjBVkWfeG/DRsbhQYE=,tag:jc3HWlyAUUmkzZMnv8Kbmw==,type:str] +#ENC[AES256_GCM,data:HBJEtuvZUeUD51q8/d+d6lQ4Yke1RfHDqo4P9l21mbvF2rrHp0KRNH0=,iv:cNpmj145TKmF/bNQN3wFeAXoqWkLxu0bqvEhydRQZcs=,tag:x02R5lfpYUMZw3eSRA5MIA==,type:comment] +rclone_synology: ENC[AES256_GCM,data:2k9aYyXMDDYt740VUUvvTSUQ+ybK3PIkBetqw5wmCXYEumk=,iv:J3ZFY3iX7OHoriJNHbmCYHglwNeh+T1UP9q608wAXGU=,tag:QmyVZQiQzBhoB9jkOiruhw==,type:str] +#ENC[AES256_GCM,data:CvsKAAXJQWM8t5bc0eInokZr,iv:YpEJYqyDNGydfrUBoLeUyJsnai/jMAo0PojRmpVPmN8=,tag:9DoQE+Wic5OnWcGIZNFsIg==,type:comment] +sckova_password: ENC[AES256_GCM,data:JgXq8TyCGI072g==,iv:kPme4bkmAfj+np32LoAcDWoQA2qFnTdqnyTSwB2TvBk=,tag:hAPQ+dWW+7QstyEdvSvpGw==,type:str] +sops: + age: + - recipient: age1k9zp37p9sejvpvwu688t7jkl8utkugrsch7a9ahufpq7uhj609gqsd3wka + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaTDA0NVNWZEcwb0ltL2sy + aExnSzNJV1NZS3M1N2Q4YlJ4VzN6T0g5dWd3CmY5STFBTW9DdjV3bStpTlkwdDNj + V3lUT0Rpc0tJb0RiNXd1OEV2RVZVZ00KLS0tIGVna0c5Mi9lamxURmdRYVlNTndU + T2ZhWHl2RVhYMjdBSG1ERmIzWlQ3UmMKYNtmkBicEaYDKteBEixZ9JHDiIoQsMOr + V+31mcG0qeGn0HBFyJoWSxJsyXKdM42qzz9P70XQPHqiXmMz3zuniQ== + -----END AGE ENCRYPTED FILE----- + - recipient: age1dx9rwrkhqj8sfr8vdfsgrqjwqefzmgtugsp6ykklpudfw4hcnuyqx9x20e + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3VFdBVytyY29zckFQVE1v + dllxbDUxR2h0Qy9nMlUxN1VPZHlHVkhuVzNRClpYWkREUnZzUTBvZjlzQnI4TnFr + Y2xNRngwNmpXMVFoa1FzYnpiTE5FcXcKLS0tIHRWY3RsK3NXOS9UakNPV2lKWERo + ZEpqaVBCc0J1Ui9pZE1wOUkxN2NPNUkKmrT2o9AgJAQsPZkZEoeNy2VbqgiNE+PW + P9YutsxmnbCwiLt4GItq0ZSDxRr2mPcLOZcJZ3M7MFoka36peXilUg== + -----END AGE ENCRYPTED FILE----- + - recipient: age1ygykyl3xyfhkt0x46frqnef4f39w0cnu6d98nf0efl43f706uqtsnsx5nd + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWdGRYQ3Z1YXdZaFk1eG1n + bFRBMXZOc0hnQjRWaGRaSTBqS1NoUUFjOG1nClhFd2ZEUTQ2WFIrTzVrbU5NOUpE + VDBYSmdVTk1RT1g5dXB3eXl4YklUMEUKLS0tIEZGMEw3VWpQVXYwajFJeFQ4cjdj + anJmOWpjR0w1c3RBWC9kUVFpRlNRWWcKqSxAQIOdnDKLiDorI7NZpwweLiNftQd/ + G+kIZPqLmGt7LxuYfvazAZ0qha9UJ9/IWiiY4goc7THF8fPTNhbwwQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2026-04-03T13:51:22Z" + mac: ENC[AES256_GCM,data:jQtzEZWE6csGTQE939UAl3xA6ecqLD4aGRqw7KF7GqW0w3FTfC59uel1xM2Nl91Bg42TzYsO9WB3rox5daFAcUgoQE0TNMAbH+w/vkVc3NoJHrWQlV69j8zUAAiNgbAx30l1MIjLS/zJ6Xlt+jkj4FtPfK0d84V/O2KwCBAJ+uM=,iv:+u3muRmMuZJUcUNHJDOqzytxgK60YxxmawwQeUTm9aU=,tag:mR8lTA7dgfOqYqUvCAuYFQ==,type:str] + pgp: + - created_at: "2026-04-03T20:00:57Z" + enc: |- + -----BEGIN PGP MESSAGE----- + + hF4DrD+TWkWMG9QSAQdA0UdBBAWr7EsXODCWUq6xwueaGar9NX2czQM2r5ALyl8w + 2sG5IY/tj3baCwZwljtK7BzhkMfkY9dfW9a9pkZ/ptWYQLAVmGJTFLDo/tXFl0ol + 0lwBFmeeDYqoGb/p4Vzu4bWNziy0pVt6tgcaQmtrPW576SWJ2hg2O5GwKX2yWPu4 + iotgvTARkLWiXkKxyTYhWDQVmL4ue1AsNVxGI6NHaosVwgcR+O88ZGnyoc7g9Q== + =+F0l + -----END PGP MESSAGE----- + fp: 7622FD7E6AB9F1E9D2CEFE2700F325187C68651A + unencrypted_suffix: _unencrypted + version: 3.12.2 diff --git a/sops-example.yaml b/sops-example.yaml new file mode 100644 index 0000000..23baaf7 --- /dev/null +++ b/sops-example.yaml @@ -0,0 +1,7 @@ +# nix-shell -p openssl --run 'openssl rand -hex 32' +searxng_secret: +# echo 'secretpassword' | rclone obscure - +rclone_synology: +# sckova's password +sckova_password: + diff --git a/sops.nix b/sops.nix new file mode 100644 index 0000000..73c5fe1 --- /dev/null +++ b/sops.nix @@ -0,0 +1,16 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + sops = { + defaultSopsFile = ./secrets/secrets.yaml; + defaultSopsFormat = "yaml"; + secrets = { + searxng_secret = { }; + rclone_synology = { }; + }; + }; +} diff --git a/system/default.nix b/system/default.nix index 332e25f..12ad2da 100755 --- a/system/default.nix +++ b/system/default.nix @@ -2,45 +2,40 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). { + config, pkgs, ... }: { - environment.sessionVariables = { - # this makes electron apps work per the wiki - NIXOS_OZONE_WL = "1"; + # the user to activate + userOptions = { + name = "Sean Kovacs"; + username = "sckova"; + email = "kovacsmillio@gmail.com"; }; - boot = { - plymouth = { - enable = true; - logo = "${pkgs.nixos-icons}/share/icons/hicolor/64x64/apps/nix-snowflake-white.png"; - }; + sops.secrets.sckova_password.neededForUsers = true; + users.users.sckova.hashedPasswordFile = config.sops.secrets.sckova_password.path; + boot = { + plymouth.enable = true; + plymouth.logo = "${pkgs.nixos-icons}/share/icons/hicolor/64x64/apps/nix-snowflake-white.png"; loader = { - timeout = 3; - # systemd-boot = { + timeout = 0; + systemd-boot.enable = true; + # limine = { # enable = true; - # consoleMode = lib.mkForce "auto"; - # configurationLimit = 10; + # maxGenerations = 10; + # style = { + # wallpapers = [ ]; + # wallpaperStyle = "stretched"; + # backdrop = "#1e1e2e"; + # interface = { + # branding = "kova's nixos!"; + # brandingColor = 5; + # }; + # }; # }; - limine = { - enable = true; - maxGenerations = 10; - extraConfig = '' - timeout: 3 - ''; - style = { - wallpapers = [ ]; - wallpaperStyle = "stretched"; - backdrop = "#1e1e2e"; - interface = { - branding = "kova's nixos!"; - brandingColor = 5; - }; - }; - }; - # efi.canTouchEfiVariables = true; }; kernelParams = [ "quiet" @@ -53,11 +48,146 @@ ]; consoleLogLevel = 0; initrd.verbose = false; + extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 + ''; }; - networking.networkmanager.enable = true; - hardware.bluetooth.enable = true; + programs = { + gnupg.agent = { + enable = true; + enableSSHSupport = true; + pinentryPackage = pkgs.pinentry-curses; + }; + niri.enable = true; + niri.package = pkgs.niri-unstable; + dconf.enable = true; + dconf.profiles.user = { + databases = [ + { + # breaks user-level indirect config of dconf + # lockAll = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + clock-format = "12h"; + clock-show-weekday = true; + }; + "org/gnome/desktop/wm/preferences" = { + button-layout = ":"; + action-double-click-titlebar = "'none'"; + }; + "org/gnome/desktop/media-handling" = { + automount = false; + automount-open = false; + autorun-never = true; + }; + "org/gnome/settings-daemon/plugins/power" = { + sleep-inactive-ac-type = "nothing"; + }; + "org/gnome/mutter" = { + edge-tiling = true; + dynamic-workspaces = true; + experimental-features = [ "variable-refresh-rate" ]; + }; + }; + } + ]; + }; + }; + services = { + displayManager = { + autoLogin.enable = true; + autoLogin.user = config.userOptions.username; + defaultSession = "niri"; + sddm.enable = true; + sddm.wayland.enable = true; + }; + gnome.gnome-keyring.enable = true; + libinput.enable = true; + printing.enable = true; + pipewire = { + enable = true; + systemWide = true; + wireplumber.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + udisks2.enable = true; + gvfs.enable = true; + upower.enable = true; + power-profiles-daemon.enable = true; + openssh.enable = true; + glances.enable = true; + glances.package = pkgs.glances.overrideAttrs (oldAttrs: { + disabledTests = (oldAttrs.disabledTests or [ ]) ++ [ + "test_phys_core_returns_int" + ]; + }); + }; + + environment.systemPackages = with pkgs; [ + git + firefoxpwa + (wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }) + ]; + + security = { + pam.services = { + niri.enableGnomeKeyring = config.services.gnome.gnome-keyring.enable; + swaylock = { + name = "swaylock"; + enableGnomeKeyring = config.services.gnome.gnome-keyring.enable; + gnupg.enable = true; + gnupg.noAutostart = true; + }; + }; + sudo.wheelNeedsPassword = false; + polkit.enable = true; + }; + + networking = { + firewall.enable = false; + networkmanager.enable = true; + hosts = { + "192.168.1.64" = [ + "kube1" + "kube1.local" + "kube1.attlocal.net" + ]; + "192.168.1.65" = [ + "kube2" + "kube2.local" + "kube2.attlocal.net" + ]; + "192.168.1.66" = [ + "kube3" + "kube3.local" + "kube3.attlocal.net" + "kube3.taila30609.ts.net" + ]; + "192.168.1.67" = [ + "kube4" + "kube4.local" + "kube4.attlocal.net" + ]; + }; + }; + + documentation.man.enable = true; + hardware.graphics.enable = true; + hardware.bluetooth.enable = true; time.timeZone = "America/New_York"; i18n.defaultLocale = "en_US.UTF-8"; i18n.extraLocaleSettings = { @@ -72,108 +202,6 @@ LC_TIME = "en_US.UTF-8"; }; - # Enable OpenGL - hardware.graphics = { - enable = true; - }; - - programs.niri = { - enable = true; - package = pkgs.niri-unstable; - }; - services.gnome.gnome-keyring.enable = true; - security.pam.services.niri.enableGnomeKeyring = true; - programs.dconf.enable = true; - - programs.dconf.profiles.user = { - databases = [ - { - # breaks user-level indirect config of dconf - # lockAll = true; - settings = { - "org/gnome/desktop/interface" = { - color-scheme = "prefer-dark"; - clock-format = "12h"; - clock-show-weekday = true; - }; - "org/gnome/desktop/wm/preferences" = { - button-layout = ":"; - action-double-click-titlebar = "'none'"; - }; - "org/gnome/desktop/media-handling" = { - automount = false; - automount-open = false; - autorun-never = true; - }; - "org/gnome/settings-daemon/plugins/power" = { - sleep-inactive-ac-type = "nothing"; - }; - "org/gnome/mutter" = { - edge-tiling = true; - dynamic-workspaces = true; - experimental-features = [ "variable-refresh-rate" ]; - }; - }; - } - ]; - }; - - # aerothemeplasma = { - # enable = true; - # plasma.enable = true; - # fonts.enable = false; - # plymouth.enable = false; - # sddm.enable = true; - # }; - - services = { - # displayManager = { - # gdm.enable = true; - # defaultSession = "niri"; - # }; - desktopManager.plasma6.enable = true; - displayManager = { - sddm.enable = true; - # defaultSession = "aerothemeplasma"; - }; - - libinput.enable = true; - printing.enable = true; - pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - }; - udisks2.enable = true; - gvfs.enable = true; - - upower.enable = true; - power-profiles-daemon.enable = true; - }; - - environment = { - systemPackages = with pkgs; [ - git - firefoxpwa - distrobox - ]; - }; - - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - pinentryPackage = pkgs.pinentry-curses; - }; - networking.firewall.enable = false; - - documentation.man = { - enable = true; - generateCaches = false; - }; - - services.openssh.enable = true; - # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions # on your system were taken. It‘s perfectly fine and recommended to leave diff --git a/system/games/default.nix b/system/games/default.nix new file mode 100644 index 0000000..cbe1d88 --- /dev/null +++ b/system/games/default.nix @@ -0,0 +1,37 @@ +{ + config, + pkgs, + lib, + ... +}: +{ + programs = { + gamescope = { + enable = true; + capSysNice = false; + args = [ + "--output-width 3840" + "--nested-width 3840" + "--output-height 2160" + "--nested-height 2160" + "--expose-wayland" + "--fullscreen" + ]; + }; + gamemode.enable = true; + }; + + services = { + ananicy = { + enable = true; + package = pkgs.ananicy-cpp; + rulesProvider = pkgs.ananicy-cpp; + extraRules = [ + { + "name" = "gamescope"; + "nice" = -20; + } + ]; + }; + }; +} diff --git a/system/hosts/alien/default.nix b/system/hosts/alien/default.nix index 21bcf9f..7ba7577 100644 --- a/system/hosts/alien/default.nix +++ b/system/hosts/alien/default.nix @@ -8,12 +8,16 @@ environment.systemPackages = with pkgs; [ ddcutil mangohud - (bottles.override { removeWarningPopup = true; }) openrgb + p7zip + protontricks + zenity + wineWow64Packages.stable + wineWow64Packages.waylandFull ]; # enable ddcutil - users.users.sckova.extraGroups = [ "i2c" ]; + users.users.${config.userOptions.username}.extraGroups = [ "i2c" ]; boot.extraModulePackages = [ config.boot.kernelPackages.ddcci-driver ]; boot.kernelModules = [ "i2c-dev" @@ -36,10 +40,6 @@ boot.loader.limine.maxGenerations = lib.mkForce 100; programs = { - gamescope = { - enable = true; - capSysNice = false; - }; steam = { enable = true; gamescopeSession.enable = true; @@ -48,38 +48,11 @@ }; }; - services.ananicy = { - enable = true; - package = pkgs.ananicy-cpp; - rulesProvider = pkgs.ananicy-cpp; - extraRules = [ - { - "name" = "gamescope"; - "nice" = -20; - } - ]; - }; - services.xserver.videoDrivers = [ "modesetting" "nvidia" ]; - services.displayManager = { - autoLogin = { - enable = false; - user = "sckova"; - }; - }; - - environment = { - loginShellInit = '' - [[ "$(tty)" = "/dev/tty1" ]] && ./gs.sh - ''; - }; - - security.sudo.wheelNeedsPassword = false; - hardware.nvidia = { modesetting.enable = true; powerManagement.enable = false; @@ -87,13 +60,6 @@ open = false; }; - services.sunshine = { - enable = true; - autoStart = true; - capSysAdmin = true; - openFirewall = true; - }; - # virtualization settings virtualisation = { @@ -109,14 +75,21 @@ virtualisation.hypervGuest.enable = true; boot.blacklistedKernelModules = [ "hyperv_fb" ]; - boot.binfmt.emulatedSystems = [ - "aarch64-linux" - "riscv64-linux" - ]; - # i don't even remember what this does or why i added it systemd.tmpfiles.rules = [ "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" - "d /mnt/storage 0775 sckova users - -" + "d /mnt/storage 0775 ${config.userOptions.username} users - -" ]; + + services.factorio = { + enable = true; + openFirewall = true; + requireUserVerification = false; + lan = true; + port = 25565; + # bind = "[::]"; # support IPv6 + game-name = "kova's minecraft"; + game-password = "ThisIsASuperSecurePasswordThatNobodyWillGuess"; + admins = [ config.userOptions.username ]; + }; } diff --git a/system/hosts/alien/gs.sh b/system/hosts/alien/gs.sh deleted file mode 100644 index 40cd18b..0000000 --- a/system/hosts/alien/gs.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -set -xeuo pipefail - -gamescopeArgs=( - --adaptive-sync # VRR support - --hdr-enabled - --mangoapp # performance overlay - --rt - --steam -) -steamArgs=( - -pipewire-dmabuf - -tenfoot -) -mangoConfig=( - cpu_temp - gpu_temp - ram - vram -) -mangoVars=( - MANGOHUD=1 - MANGOHUD_CONFIG="$(IFS=,; echo "${mangoConfig[*]}")" -) - -export "${mangoVars[@]}" -exec gamescope "${gamescopeArgs[@]}" -- steam "${steamArgs[@]}" diff --git a/system/hosts/peach/apple-rainbow.png b/system/hosts/peach/apple-rainbow.png new file mode 100644 index 0000000..84e7598 Binary files /dev/null and b/system/hosts/peach/apple-rainbow.png differ diff --git a/system/hosts/peach/default.nix b/system/hosts/peach/default.nix index 76d8105..a0c4cc4 100644 --- a/system/hosts/peach/default.nix +++ b/system/hosts/peach/default.nix @@ -1,7 +1,8 @@ { - pkgs, config, + pkgs, lib, + seamless-asahi-plymouth, ... }: let @@ -13,10 +14,43 @@ let }; in { + + nixpkgs.overlays = [ + (final: prev: { + uboot-asahi = prev.uboot-asahi.overrideAttrs (old: { + postConfigure = (old.postConfigure or "") + '' + cat >> .config <<'EOF' + # CONFIG_VIDEO_LOGO is not set + CONFIG_DISPLAY_BOARDINFO_LATE=n + CONFIG_BOOTDELAY=0 + CONFIG_SILENT_CONSOLE=y + CONFIG_PREBOOT="setenv silent 1" + EOF + + # Regenerate the configuration with new flags + make olddefconfig + ''; + }); + }) + ]; + boot = { kernelParams = [ "appledrm.show_notch=1" ]; - m1n1CustomLogo = "${asahi-artwork}/logos/png_256/AsahiLinux_logomark.png"; - plymouth.logo = lib.mkForce "${asahi-artwork}/logos/png_64/AsahiLinux_logomark.png"; + # thank you to u/douv: + # https://www.reddit.com/r/AsahiLinux/comments/1sb8cby/retro_boot_logo/ + m1n1CustomLogo = ./apple-rainbow.png; + plymouth = { + enable = true; + theme = "seamless-asahi"; + themePackages = [ + (seamless-asahi-plymouth.packages.${pkgs.system}.default.override { + logo = ./apple-rainbow.png; + }) + ]; + extraConfig = '' + DeviceScale=1 + ''; + }; }; programs.dconf.profiles.gdm.databases = [ @@ -26,6 +60,19 @@ in } ]; + # environment.systemPackages = with pkgs; [ + # # note for wine support (should be done by 26.05 release): + # # https://github.com/NixOS/nixpkgs/issues/412458 + # muvm + # fex + # ]; + + services.logind.settings.Login = { + HandleSuspendKey = "ignore"; + HandlePowerKey = "lock"; + HandleLidSwitch = "lock"; + }; + virtualisation.docker = { enable = true; # Use the rootless mode - run Docker daemon as non-root user @@ -34,7 +81,7 @@ in setSocketVariable = true; }; }; - users.users.sckova.extraGroups = [ "docker" ]; + users.users.${config.userOptions.username}.extraGroups = [ "docker" ]; hardware.asahi = { enable = true; @@ -52,6 +99,4 @@ in ''; }; }; - - security.sudo.wheelNeedsPassword = false; } diff --git a/system/hosts/vm-generic/default.nix b/system/hosts/vm-generic/default.nix deleted file mode 100644 index b2183eb..0000000 --- a/system/hosts/vm-generic/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ catppuccin, ... }: -{ - home-manager.users.sckova = { - imports = [ catppuccin.homeModules.catppuccin ]; - }; - - services.spice-vdagentd.enable = true; - - virtualisation.vmVariant = { - virtualisation = { - memorySize = 8192; - cores = 6; - }; - }; - - security.sudo.wheelNeedsPassword = false; -} diff --git a/system/searxng/default.nix b/system/searxng/default.nix index 75161b5..e908f80 100644 --- a/system/searxng/default.nix +++ b/system/searxng/default.nix @@ -1,22 +1,20 @@ { lib, - pkgs, config, ... }: { + sops.templates."searxng.env".content = '' + SEARXNG_SECRET=${config.sops.placeholder.searxng_secret} + ''; services.searx = { enable = true; redisCreateLocally = true; + environmentFile = config.sops.templates."searxng.env".path; settings = { server = { - secret_key = lib.removeSuffix "\n" ( - builtins.readFile ( - pkgs.runCommand "gen-key" { buildInputs = [ pkgs.openssl ]; } "openssl rand -hex 32 > $out" - ) - ); - port = 8080; + port = 5364; bind_address = "127.0.0.1"; }; diff --git a/system/shell/fish.nix b/system/shell/fish.nix index 229692a..cd8ab72 100644 --- a/system/shell/fish.nix +++ b/system/shell/fish.nix @@ -19,5 +19,4 @@ alias edit "nvim" ''; }; - documentation.man.generateCaches = false; } diff --git a/system/tailscale/default.nix b/system/tailscale/default.nix index 90e21a8..2a7d652 100644 --- a/system/tailscale/default.nix +++ b/system/tailscale/default.nix @@ -7,26 +7,21 @@ lib, ... }: -let - tailscaleWaitScript = pkgs.writeShellScript "tailscale-wait-for-ip" '' - echo "Waiting for tailscale0 to get an IP address..." - for i in {1..15}; do - if ${lib.getExe' pkgs.iproute2 "ip"} addr show dev tailscale0 2>/dev/null | ${lib.getExe' pkgs.gnugrep "grep"} -q 'inet '; then - echo "tailscale0 has IP address" - exit 0 - fi - echo "Attempt $i" - sleep 1 - done - echo "Warning: tailscale0 did not get IP address within 15 seconds" - exit 0 - ''; -in { systemd.services.tailscaled = { - serviceConfig = { - ExecStartPost = tailscaleWaitScript; - }; + serviceConfig.ExecStartPost = pkgs.writeShellScript "tailscale-wait-for-ip" '' + echo "Waiting for tailscale0 to get an IP address..." + for i in {1..15}; do + if ${lib.getExe' pkgs.iproute2 "ip"} addr show dev tailscale0 2>/dev/null | ${lib.getExe' pkgs.gnugrep "grep"} -q 'inet '; then + echo "tailscale0 has IP address" + exit 0 + fi + echo "Attempt $i" + sleep 1 + done + echo "Warning: tailscale0 did not get IP address within 15 seconds" + exit 0 + ''; }; services.tailscale = { diff --git a/system/widevine/default.nix b/system/widevine/default.nix index df1aa78..33e32da 100644 --- a/system/widevine/default.nix +++ b/system/widevine/default.nix @@ -7,29 +7,42 @@ }: { nixpkgs.overlays = lib.mkIf (config.nixpkgs.hostPlatform.isLinux) [ - (final: prev: { - wrapFirefox = - browser: opts: - let - extraPrefs = (opts.extraPrefs or "") + '' - lockPref("media.gmp-widevinecdm.version", "system-installed"); - lockPref("media.gmp-widevinecdm.visible", true); - lockPref("media.gmp-widevinecdm.enabled", true); - lockPref("media.gmp-widevinecdm.autoupdate", false); - lockPref("media.eme.enabled", true); - lockPref("media.eme.encrypted-media-encryption-scheme.enabled", true); - ''; - widevineCdmDir = "${final.widevine-cdm}/share/google/chrome/WidevineCdm"; - widevineOutDir = "$out/gmp-widevinecdm/system-installed"; - in - (prev.wrapFirefox browser (opts // { inherit extraPrefs; })).overrideAttrs (previousAttrs: { - buildCommand = previousAttrs.buildCommand + '' - mkdir -p "${widevineOutDir}" - ln -s "${widevineCdmDir}/_platform_specific/linux_arm64/libwidevinecdm.so" "${widevineOutDir}/libwidevinecdm.so" - ln -s "${widevineCdmDir}/manifest.json" "${widevineOutDir}/manifest.json" - wrapProgram "$oldExe" --set MOZ_GMP_PATH "${widevineOutDir}" - ''; - }); - }) + ( + final: prev: + let + # Determine the correct directory name based on the system architecture + archDir = + if final.stdenv.hostPlatform.isAarch64 then + "linux_arm64" + else if final.stdenv.hostPlatform.isx86_64 then + "linux_x64" + else + throw "Unsupported architecture for Widevine CDM"; + in + { + wrapFirefox = + browser: opts: + let + extraPrefs = (opts.extraPrefs or "") + '' + lockPref("media.gmp-widevinecdm.version", "system-installed"); + lockPref("media.gmp-widevinecdm.visible", true); + lockPref("media.gmp-widevinecdm.enabled", true); + lockPref("media.gmp-widevinecdm.autoupdate", false); + lockPref("media.eme.enabled", true); + lockPref("media.eme.encrypted-media-encryption-scheme.enabled", true); + ''; + widevineCdmDir = "${final.widevine-cdm}/share/google/chrome/WidevineCdm"; + widevineOutDir = "$out/gmp-widevinecdm/system-installed"; + in + (prev.wrapFirefox browser (opts // { inherit extraPrefs; })).overrideAttrs (previousAttrs: { + buildCommand = previousAttrs.buildCommand + '' + mkdir -p "${widevineOutDir}" + ln -s "${widevineCdmDir}/_platform_specific/${archDir}/libwidevinecdm.so" "${widevineOutDir}/libwidevinecdm.so" + ln -s "${widevineCdmDir}/manifest.json" "${widevineOutDir}/manifest.json" + wrapProgram "$oldExe" --set MOZ_GMP_PATH "${widevineOutDir}" + ''; + }); + } + ) ]; }