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 1a26d15..426e826 100644 --- a/flake.lock +++ b/flake.lock @@ -40,11 +40,11 @@ "cachyos-kernel": { "flake": false, "locked": { - "lastModified": 1773425695, - "narHash": "sha256-O5Fr6f+iS+IVKdB59yqkCaWfkr1SSHD5BLDDlZO7RwU=", + "lastModified": 1773637879, + "narHash": "sha256-hFKu2SaRoqt6+zbmcFW6A0AbBENIX8XooJLXQWa3sLc=", "owner": "CachyOS", "repo": "linux-cachyos", - "rev": "3b9ae1ae5d4ee95e1509d350b65c0777dde97628", + "rev": "fa09a5bc69d3e7feeed9b1402c7df06c8170402a", "type": "github" }, "original": { @@ -56,11 +56,11 @@ "cachyos-kernel-patches": { "flake": false, "locked": { - "lastModified": 1773430072, - "narHash": "sha256-0X47YCF1CUnLiQ1M6Lh4hc3ax9aV5DX/wCmMfuMyM1o=", + "lastModified": 1773635524, + "narHash": "sha256-JErpxWTdoHq4JuDerfsbPA60FmWOxK4oX9UL9CcsP/Q=", "owner": "CachyOS", "repo": "kernel-patches", - "rev": "ac70453c25200f0a30ad38b3caa63020869f0f8a", + "rev": "5544a0679fd6f6fb714e275514449c4ab9db2a53", "type": "github" }, "original": { @@ -183,11 +183,11 @@ ] }, "locked": { - "lastModified": 1773681856, - "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", + "lastModified": 1774007980, + "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", "owner": "nix-community", "repo": "home-manager", - "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", + "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", "type": "github" }, "original": { @@ -229,17 +229,17 @@ "niri-blur": { "flake": false, "locked": { - "lastModified": 1772514470, - "narHash": "sha256-nSrfHwbjg8/Rfx5pqDqU8bL5IWh99MsvxfjNZYxqEFw=", + "lastModified": 1773732451, + "narHash": "sha256-ky0eBF/zoiJTIoLSpV1EmupVCEZMSp9pQIlHOpvDoMU=", "owner": "niri-wm", "repo": "niri", - "rev": "c837d944f0cc08580ee86574dd0c3a68ca9379a4", + "rev": "17577e7db0e530d56e74ec244a185cdd1b9ad6cc", "type": "github" }, "original": { "owner": "niri-wm", + "ref": "wip/branch", "repo": "niri", - "rev": "c837d944f0cc08580ee86574dd0c3a68ca9379a4", "type": "github" } }, @@ -269,11 +269,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1773597464, - "narHash": "sha256-3SVrc1AMkY1UE36MD4qvmTkY/ZToK2F55Afut5Qm5F8=", + "lastModified": 1773804995, + "narHash": "sha256-LL6EG35pbxgjsqYIpwUnpHGDmKFYttE+BILBNhsEaJk=", "owner": "xddxdd", "repo": "nix-cachyos-kernel", - "rev": "30468236d5cdd9cb5dea6e757159e04816439146", + "rev": "3286b7ecf1d864e2be050af78aa633d4e3ae8fdb", "type": "github" }, "original": { @@ -316,11 +316,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773610124, - "narHash": "sha256-EpC7ELOKmb+xXaqpK5ZRpJ5g9fxxg6tWny7/rUBfrwk=", + "lastModified": 1773814637, + "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9fe1300f4360e13f39d6d1d006e54fd5093e9ad5", + "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", "type": "github" }, "original": { @@ -332,11 +332,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1773646010, - "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { @@ -348,11 +348,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1773563071, - "narHash": "sha256-p4f6smYpck1hw6gYsT2omq01gnlZ1E7HTpssDQ0fP+g=", + "lastModified": 1773738184, + "narHash": "sha256-zWRjT5oPabNCiC1A3QkFXpfnsgUjyg6fUZWC+IiiZH0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c6f50e5b62030a50799682b6babc9dcc5a271ae", + "rev": "41a2715cc472025a19bc0eb9dc4ee8b7406bfa6f", "type": "github" }, "original": { @@ -408,11 +408,11 @@ "noctalia-qs": "noctalia-qs" }, "locked": { - "lastModified": 1773694650, - "narHash": "sha256-3AhKBhSuHxH9COGAfdZSTWdoJxI9wyI1wiq3DEcS1j8=", + "lastModified": 1774029401, + "narHash": "sha256-pM4U3rRPs+QUh/qfPFhcpmN2g9Nb91eIro1xcLdEYnA=", "owner": "noctalia-dev", "repo": "noctalia-shell", - "rev": "b647e385a8e0a02a413a6e584d53e615191276e4", + "rev": "56457b140047e96a7a1e3bae6cf00cb9485d49a1", "type": "github" }, "original": { @@ -431,11 +431,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1773514555, - "narHash": "sha256-XNmLf4HqUM6/he/eJiHT+Mvxmt7QuwgGU14jB4Ha+pM=", + "lastModified": 1773842483, + "narHash": "sha256-oRqz+5AbNKfUWWwN5c83CsSOsUWVGITh0HZg+wX5Q/8=", "owner": "noctalia-dev", "repo": "noctalia-qs", - "rev": "8aa9d8ce86ef018fb442c585ad7fbb2a15a4f822", + "rev": "3962ff1e0b59ef067c57199d31271ddbf23b29cd", "type": "github" }, "original": { @@ -452,11 +452,11 @@ ] }, "locked": { - "lastModified": 1773693904, - "narHash": "sha256-4etCbDwnQ5EzdSiflzSistWwDZYqO0t3RVQOw6FcaTI=", + "lastModified": 1774025645, + "narHash": "sha256-JotdqxIxeLhCxwDlciC8nvwABpJF/b5MQd2O16cjd7A=", "owner": "nix-community", "repo": "NUR", - "rev": "fb1b5883b41bd32d27591004478ad8e32ea6ba5f", + "rev": "c01705bad7cf4d0c6838e7e46de8d4accc9c2f89", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f4165ce..e7d4f3b 100644 --- a/flake.nix +++ b/flake.nix @@ -30,7 +30,7 @@ }; niri-blur = { - url = "github:niri-wm/niri/c837d944f0cc08580ee86574dd0c3a68ca9379a4"; + url = "github:niri-wm/niri/wip/branch"; flake = false; }; diff --git a/home/apps/firefox.nix b/home/apps/firefox.nix index 38250db..2a4e4ec 100644 --- a/home/apps/firefox.nix +++ b/home/apps/firefox.nix @@ -112,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; @@ -151,6 +152,7 @@ bitwarden canvasblocker shinigami-eyes + dearrow ]; settings = { "{7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}".settings = { @@ -231,6 +233,7 @@ "_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" @@ -257,6 +260,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 = [ diff --git a/home/games/default.nix b/home/games/default.nix index c7da03f..71db260 100644 --- a/home/games/default.nix +++ b/home/games/default.nix @@ -1,6 +1,11 @@ +{ pkgs, ... }: { imports = [ ./minecraft.nix ./morrowind.nix ]; + + home.packages = with pkgs; [ + dolphin-emu + ]; } diff --git a/home/games/morrowind.nix b/home/games/morrowind.nix index dfb27c5..ff85bab 100644 --- a/home/games/morrowind.nix +++ b/home/games/morrowind.nix @@ -3,7 +3,7 @@ ... }: { - home.packages = with pkgs; [ openmw-unstable ]; + home.packages = with pkgs; [ openmw ]; home.sessionVariables.SDL_VIDEO_DRIVER = "wayland"; programs.firefox.profiles.default.search.engines.uesp = { diff --git a/home/hosts/alien/default.nix b/home/hosts/alien/default.nix index 7aaf703..d7e12b6 100644 --- a/home/hosts/alien/default.nix +++ b/home/hosts/alien/default.nix @@ -1,8 +1,5 @@ { - config, pkgs, - lib, - pkgs-unstable, ... }: { @@ -12,8 +9,7 @@ }; home.packages = with pkgs; [ - pkgs-unstable.ckan - + ckan spotify adwsteamgtk daggerfall-unity @@ -21,6 +17,27 @@ 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"; diff --git a/home/hosts/peach/default.nix b/home/hosts/peach/default.nix index 9820702..4f09801 100644 --- a/home/hosts/peach/default.nix +++ b/home/hosts/peach/default.nix @@ -5,7 +5,7 @@ }: { colors = { - scheme = "material-dark"; + scheme = "catppuccin-frappe"; accent = "base09"; }; diff --git a/home/services/default.nix b/home/services/default.nix index d3e47b8..350e001 100644 --- a/home/services/default.nix +++ b/home/services/default.nix @@ -1,4 +1,5 @@ { + osConfig, config, pkgs, ... @@ -27,22 +28,89 @@ }; }; - services = { - spotifyd = { - enable = true; - 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; - }; - }; - }; + 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 = { @@ -81,6 +149,8 @@ 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 = { diff --git a/home/terminal/neovim.nix b/home/terminal/neovim.nix index beda1d1..4284b61 100644 --- a/home/terminal/neovim.nix +++ b/home/terminal/neovim.nix @@ -157,7 +157,6 @@ option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; keywordLength = 3; } - { name = "copilot"; } { name = "path"; # file system paths keywordLength = 3;