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