├── .vscode └── settings.json ├── apps ├── yt-dlp.nix ├── gamescope.nix ├── bash.nix ├── nushell.nix ├── steam.nix ├── chromium.nix ├── helix.nix ├── starship.nix ├── plasma-desktop.nix ├── firefox.nix ├── vscode.nix └── mpv.nix ├── README.md ├── appimage.sh ├── modules ├── nixos │ └── default.nix └── home-manager │ └── default.nix ├── pkgs ├── default.nix ├── rename-by-metadata.nix └── zephyrusctl.nix ├── hosts └── zephyrus │ ├── gaming.nix │ ├── specializations │ ├── default.nix │ ├── gaming.nix │ └── media.nix │ ├── boot.nix │ ├── web.nix │ ├── multimedia.nix │ ├── default.nix │ ├── home.nix │ ├── users.nix │ ├── development.nix │ ├── hardware-configuration.nix │ ├── plasma-desktop.nix │ ├── configuration.nix │ └── README.md ├── flatpack.sh ├── Makefile ├── overlays └── default.nix ├── flake.nix └── flake.lock /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true 3 | } -------------------------------------------------------------------------------- /apps/yt-dlp.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs.yt-dlp.enable = true; 3 | } 4 | -------------------------------------------------------------------------------- /apps/gamescope.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs.gamescope = { 3 | enable = true; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NixOS Configuration 2 | 3 | ## Initial run 4 | 5 | ```sh 6 | sudo nixos-rebuild switch --flake . 7 | ``` 8 | -------------------------------------------------------------------------------- /appimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | wget -O ~/Downloads/deemix-gui.AppImage https://archive.org/download/deemix/gui/linux-x64-latest.AppImage 4 | chmod +x ~/Downloads/deemix-gui.AppImage 5 | -------------------------------------------------------------------------------- /modules/nixos/default.nix: -------------------------------------------------------------------------------- 1 | # Add your reusable NixOS modules to this directory, on their own file (https://wiki.nixos.org/wiki/NixOS_modules). 2 | # These should be stuff you would like to share with others, not your personal configurations. 3 | { 4 | # List your module files here 5 | # my-module = import ./my-module.nix; 6 | } 7 | -------------------------------------------------------------------------------- /modules/home-manager/default.nix: -------------------------------------------------------------------------------- 1 | # Add your reusable home-manager modules to this directory, on their own file (https://wiki.nixos.org/wiki/NixOS_modules). 2 | # These should be stuff you would like to share with others, not your personal configurations. 3 | { 4 | # List your module files here 5 | # my-module = import ./my-module.nix; 6 | } 7 | -------------------------------------------------------------------------------- /pkgs/default.nix: -------------------------------------------------------------------------------- 1 | # Custom packages, that can be defined similarly to ones from nixpkgs 2 | # You can build them using 'nix build .#example' 3 | {pkgs, ...}: { 4 | # example = pkgs.callPackage ./example { }; 5 | zephyrusctl = pkgs.callPackage ./zephyrusctl.nix {}; 6 | rename-by-metadata = pkgs.callPackage ./rename-by-metadata.nix {}; 7 | } 8 | -------------------------------------------------------------------------------- /apps/bash.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | home.packages = with pkgs; [eza]; 3 | 4 | programs.bash = { 5 | enable = true; 6 | enableCompletion = true; 7 | historyControl = ["erasedups" "ignoredups"]; 8 | shellAliases = { 9 | ls = "eza --icons -F -H --group-directories-first --git -1"; 10 | ll = "ls -alF"; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /hosts/zephyrus/gaming.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | environment.systemPackages = with pkgs; [ 3 | mangohud 4 | goverlay 5 | lutris 6 | heroic 7 | # wineWowPackages.stable 8 | wineWowPackages.waylandFull # unstable 9 | winetricks 10 | protonup-qt 11 | protontricks 12 | stable.yuzu-mainline 13 | ]; 14 | 15 | imports = [ 16 | ../../apps/steam.nix 17 | ../../apps/gamescope.nix 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /flatpack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo 4 | flatpak remote-add --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo 5 | 6 | flatpak install -y flathub dev.aunetx.deezer 7 | flatpak install -y flathub org.nickvision.tubeconverter 8 | flatpak install -y flathub it.mijorus.gearlever # Manage App Images 9 | 10 | # flatpak install -y flathub-beta com.visualstudio.code.insiders 11 | -------------------------------------------------------------------------------- /hosts/zephyrus/specializations/default.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | specialisation = { 3 | gaming = { 4 | inheritParentConfig = true; # Allows for switching to normal desktop 5 | configuration = { 6 | system.nixos.tags = ["gaming"]; 7 | imports = [./gaming.nix]; 8 | }; 9 | }; 10 | media = { 11 | inheritParentConfig = true; # Allows for switching to normal desktop 12 | configuration = { 13 | system.nixos.tags = ["media"]; 14 | imports = [./media.nix]; 15 | }; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /hosts/zephyrus/boot.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | boot.loader.systemd-boot.enable = true; 3 | boot.loader.systemd-boot.consoleMode = "0"; # increase font size 4 | boot.loader.efi.canTouchEfiVariables = true; 5 | boot.tmp.cleanOnBoot = true; 6 | 7 | boot.kernelParams = [ 8 | # For AMD Zen 4 this is no longer needed: https://www.phoronix.com/news/AMD-Zen-4-Mitigations-Off 9 | "mitigations=off" 10 | "quiet" 11 | "udev.log_level=3" 12 | ]; 13 | 14 | boot.initrd.systemd.enable = true; 15 | boot.plymouth.enable = true; # Display loading screen 16 | 17 | boot.initrd.verbose = false; 18 | boot.consoleLogLevel = 0; 19 | 20 | boot.initrd.luks.devices."luks-defb6e58-f883-4c98-b933-5d62f344bb9b".device = "/dev/disk/by-uuid/defb6e58-f883-4c98-b933-5d62f344bb9b"; 21 | } 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: preview install debug update list-generations list-packages cleanup anchor 2 | 3 | preview: 4 | nh os test . 5 | bash ./flatpack.sh 6 | 7 | install: 8 | nh os switch . 9 | bash ./flatpack.sh 10 | 11 | debug: 12 | nh os test . --show-trace 13 | 14 | update: 15 | nh os switch -u . 16 | flatpak update -y 17 | 18 | list-generations: 19 | nix profile history --profile /nix/var/nix/profiles/system 20 | 21 | list-packages: 22 | flatpak list --app --columns=application | tail -n +1 23 | nix-env -qa 24 | 25 | cleanup: 26 | sudo nix profile wipe-history --older-than 7d --profile /nix/var/nix/profiles/system 27 | sudo nix store gc 28 | nh clean all --keep-since 7d --keep 3 29 | 30 | 31 | anchor: 32 | sudo nix store gc 33 | # System 34 | sudo nix-collect-garbage -d 35 | # User 36 | nix-collect-garbage -d 37 | nh clean all 38 | -------------------------------------------------------------------------------- /hosts/zephyrus/web.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | environment.systemPackages = with pkgs; [ 3 | # Browsers 4 | google-chrome 5 | chromium 6 | microsoft-edge 7 | tor-browser 8 | 9 | # Messaging 10 | telegram-desktop 11 | whatsapp-for-linux 12 | # teams-for-linux 13 | discord 14 | thunderbird 15 | ]; 16 | 17 | imports = [ 18 | ../../apps/chromium.nix 19 | ]; 20 | 21 | home-manager.users.arvigeus = { 22 | imports = [ 23 | ../../apps/firefox.nix 24 | ]; 25 | 26 | xdg.mimeApps.defaultApplications = { 27 | "x-scheme-handler/http" = ["firefox.desktop" "chromium.desktop"]; 28 | "x-scheme-handler/https" = ["firefox.desktop" "chromium.desktop"]; 29 | "text/html" = ["firefox.desktop" "chromium.desktop"]; 30 | "x-scheme-handler/mailto" = ["thunderbird.desktop"]; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /hosts/zephyrus/multimedia.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | environment.systemPackages = with pkgs; [ 3 | vlc 4 | haruna 5 | stable.gimp-with-plugins # https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/graphics/gimp/plugins/default.nix 6 | qbittorrent-qt5 7 | # lightworks 8 | # davinci-resolve 9 | mkvtoolnix 10 | ffmpeg 11 | subtitlecomposer 12 | audacious 13 | # ardour 14 | 15 | # Custom packages 16 | rename-by-metadata 17 | ]; 18 | 19 | home-manager.users.arvigeus = { 20 | imports = [ 21 | ../../apps/mpv.nix 22 | ../../apps/yt-dlp.nix 23 | ]; 24 | 25 | xdg.mimeApps.defaultApplications = { 26 | "audio/*" = ["mpv.desktop"]; 27 | "video/*" = ["mpv.desktop" "vlc.desktop"]; 28 | "image/*" = ["gwenview.desktop"]; 29 | }; 30 | }; 31 | 32 | # services.xserver.desktopManager.kodi.enable = true; 33 | } 34 | -------------------------------------------------------------------------------- /hosts/zephyrus/default.nix: -------------------------------------------------------------------------------- 1 | {outputs, ...}: { 2 | imports = [ 3 | ./boot.nix 4 | ./configuration.nix 5 | ./hardware-configuration.nix 6 | ./users.nix 7 | ./plasma-desktop.nix 8 | ./multimedia.nix 9 | ./web.nix 10 | ./gaming.nix 11 | ./development.nix 12 | ./specializations 13 | ]; 14 | 15 | nixpkgs = { 16 | # You can add overlays here 17 | overlays = [ 18 | # Add overlays your own flake exports (from overlays and pkgs dir): 19 | outputs.overlays.additions 20 | outputs.overlays.modifications 21 | outputs.overlays.stable-packages 22 | outputs.overlays.master-packages 23 | 24 | # You can also add overlays exported from other flakes: 25 | # neovim-nightly-overlay.overlays.default 26 | 27 | # Or define it inline, for example: 28 | # (final: prev: { 29 | # hi = final.hello.overrideAttrs (oldAttrs: { 30 | # patches = [ ./change-hello-to-hi.patch ]; 31 | # }); 32 | # }) 33 | ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /hosts/zephyrus/home.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | outputs, 4 | ... 5 | }: { 6 | nixpkgs = { 7 | overlays = [ 8 | # Add overlays your own flake exports (from overlays and pkgs dir): 9 | outputs.overlays.additions 10 | outputs.overlays.modifications 11 | outputs.overlays.stable-packages 12 | outputs.overlays.master-packages 13 | 14 | inputs.nix-vscode-extensions.overlays.default 15 | inputs.nur.overlay 16 | ]; 17 | # Configure your nixpkgs instance 18 | config = { 19 | allowUnfree = true; 20 | }; 21 | }; 22 | 23 | imports = [../../apps/nushell.nix]; 24 | 25 | home = { 26 | username = "arvigeus"; 27 | homeDirectory = "/home/arvigeus"; 28 | }; 29 | 30 | xdg.enable = true; 31 | xdg.mimeApps.enable = true; 32 | 33 | # Nicely reload system units when changing configs 34 | systemd.user.startServices = "sd-switch"; 35 | 36 | # The state version is required and should stay at the version you 37 | # originally installed. 38 | home.stateVersion = "23.11"; 39 | } 40 | -------------------------------------------------------------------------------- /overlays/default.nix: -------------------------------------------------------------------------------- 1 | # This file defines overlays 2 | {inputs, ...}: { 3 | # This one brings our custom packages from the 'pkgs' directory 4 | additions = final: _prev: import ../pkgs {pkgs = final;}; 5 | 6 | # This one contains whatever you want to overlay 7 | # You can change versions, add patches, set compilation flags, anything really. 8 | # https://wiki.nixos.org/wiki/Overlays 9 | modifications = final: prev: { 10 | # example = prev.example.overrideAttrs (oldAttrs: rec { 11 | # ... 12 | # }); 13 | }; 14 | 15 | # When applied, the stable nixpkgs set (declared in the flake inputs) will 16 | # be accessible through 'pkgs.stable' 17 | stable-packages = final: _prev: { 18 | stable = import inputs.nixpkgs-stable { 19 | system = final.system; 20 | config.allowUnfree = true; 21 | }; 22 | }; 23 | 24 | # When applied, the master nixpkgs set (declared in the flake inputs) will 25 | # be accessible through 'pkgs.master' 26 | master-packages = final: _prev: { 27 | master = import inputs.nixpkgs-master { 28 | system = final.system; 29 | config.allowUnfree = true; 30 | }; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /hosts/zephyrus/users.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | outputs, 5 | ... 6 | }: { 7 | imports = [ 8 | inputs.home-manager.nixosModules.home-manager 9 | ]; 10 | 11 | security.sudo.wheelNeedsPassword = false; 12 | 13 | # Define a user account. Don't forget to set a password with ‘passwd’. 14 | users.users.arvigeus = { 15 | isNormalUser = true; 16 | description = "Nikolay Stoynov"; 17 | extraGroups = ["networkmanager" "wheel" "media" "video"]; 18 | shell = pkgs.nushell; 19 | openssh.authorizedKeys.keys = [ 20 | # TODO: Add your SSH public key(s) here 21 | ]; 22 | }; 23 | 24 | # Enable automatic login for the user. 25 | services.displayManager.autoLogin.enable = true; 26 | services.displayManager.autoLogin.user = "arvigeus"; 27 | 28 | # home-manager.useGlobalPkgs = true; # Cannot use overlays with this 29 | home-manager.useUserPackages = true; 30 | home-manager.backupFileExtension = "bak"; 31 | 32 | home-manager = { 33 | extraSpecialArgs = {inherit inputs outputs;}; 34 | users = { 35 | # Import your home-manager configuration 36 | arvigeus = import ./home.nix; 37 | }; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /apps/nushell.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs = { 3 | nushell = { 4 | enable = true; 5 | extraConfig = '' 6 | let carapace_completer = {|spans| 7 | carapace $spans.0 nushell $spans | from json 8 | } 9 | $env.config = { 10 | show_banner: false, 11 | completions: { 12 | case_sensitive: false # case-sensitive completions 13 | quick: true # set to false to prevent auto-selecting completions 14 | partial: true # set to false to prevent partial filling of the prompt 15 | algorithm: "fuzzy" # prefix or fuzzy 16 | external: { 17 | # set to false to prevent nushell looking into $env.PATH to find more suggestions 18 | enable: true 19 | # set to lower can improve completion performance at the cost of omitting some options 20 | max_results: 100 21 | completer: $carapace_completer # check 'carapace_completer' 22 | } 23 | } 24 | } 25 | $env.PATH = ($env.PATH | 26 | split row (char esep) | 27 | prepend /home/myuser/.apps | 28 | append /usr/bin/env 29 | ) 30 | ''; 31 | }; 32 | carapace = { 33 | enable = true; 34 | enableNushellIntegration = true; 35 | }; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /pkgs/rename-by-metadata.nix: -------------------------------------------------------------------------------- 1 | {pkgs}: 2 | pkgs.writeShellApplication { 3 | name = "rename-by-metadata"; 4 | runtimeInputs = with pkgs; [ 5 | exiftool 6 | coreutils 7 | ]; 8 | 9 | text = '' 10 | exiftool="${pkgs.exiftool}/bin/exiftool" 11 | mv="${pkgs.coreutils}/bin/mv" 12 | echo="${pkgs.coreutils}/bin/echo" 13 | shopt -s nullglob 14 | for file in *.{heic,jpg,jpeg,mp4,mov,HEIC,JPG,JPEG,MP4,MOV} ; do 15 | datetime=$($exiftool -q -d '%Y-%m-%d-%H-%M-%S' -CreateDate "$file" | awk -F ': ' '{print $2}') 16 | ext="''${file##*.}" 17 | ext="''${ext,,}" 18 | if [ -n "$datetime" ]; then 19 | new_name="''${datetime}.''${ext}" 20 | if [ "$new_name" != "$file" ]; then 21 | if [ -e "$new_name" ]; then 22 | counter=0 23 | base_name="''${new_name%.*}" 24 | while [ -e "$new_name" ]; do 25 | new_name="''${base_name}-''${counter}.''${ext}" 26 | (( counter++ )) 27 | done 28 | fi 29 | $mv "$file" "$new_name" 30 | $echo "Renamed: $file -> $new_name" 31 | else 32 | $echo "Skipping rename, new name is same as old name: $file" 33 | fi 34 | else 35 | $echo "No metadata found for: $file" 36 | fi 37 | done 38 | shopt -u nullglob 39 | ''; 40 | } 41 | -------------------------------------------------------------------------------- /hosts/zephyrus/development.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | environment.systemPackages = with pkgs; [ 3 | lapce 4 | dotnet-sdk 5 | nodejs_18 6 | deno 7 | rustup 8 | gcc 9 | python3 10 | boxbuddy 11 | jq 12 | meld 13 | fira-code 14 | noto-fonts 15 | devbox 16 | distrobox 17 | bruno 18 | delta 19 | diffutils 20 | 21 | # Virtualization 22 | # podman-desktop 23 | 24 | # Misc 25 | virt-manager 26 | ]; 27 | 28 | home-manager.users.arvigeus.imports = [ 29 | # ../../apps/bash.nix 30 | ../../apps/starship.nix 31 | ../../apps/vscode.nix 32 | ../../apps/helix.nix 33 | ]; 34 | 35 | virtualisation = { 36 | podman = { 37 | enable = true; 38 | 39 | # Create a `docker` alias for podman, to use it as a drop-in replacement 40 | dockerCompat = true; 41 | 42 | # Required for containers under podman-compose to be able to talk to each other. 43 | defaultNetwork.settings.dns_enabled = true; 44 | }; 45 | }; 46 | 47 | # https://bobcares.com/blog/virt-manager-gpu-passthrough/ 48 | virtualisation.libvirtd.enable = true; 49 | users.users.arvigeus.extraGroups = ["libvirtd"]; 50 | 51 | # virtualisation.virtualbox.host.enable = true; 52 | # users.extraGroups.vboxusers.members = ["arvigeus"]; 53 | # virtualisation.virtualbox.host.enableExtensionPack = true; 54 | # virtualisation.virtualbox.guest.enable = true; 55 | } 56 | -------------------------------------------------------------------------------- /apps/steam.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | programs.steam = { 3 | enable = true; 4 | remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play 5 | dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server 6 | package = pkgs.steam.override { 7 | extraPkgs = pkgs: 8 | with pkgs; [ 9 | gamescope 10 | mangohud 11 | # No idea what these are for 12 | xorg.libXcursor 13 | xorg.libXi 14 | xorg.libXinerama 15 | xorg.libXScrnSaver 16 | libpng 17 | libpulseaudio 18 | libvorbis 19 | stdenv.cc.cc.lib 20 | libkrb5 21 | keyutils 22 | ]; 23 | }; 24 | }; 25 | 26 | home-manager.users.arvigeus.xdg.desktopEntries = { 27 | steamBigPicture = { 28 | name = "Steam (Big Picture Mode)"; 29 | comment = "Application for managing and playing games on Steam (Big Picture Mode)"; 30 | exec = "steam -gamepadui -steamdeck %U"; 31 | terminal = false; 32 | categories = ["Application"]; 33 | mimeType = []; 34 | }; 35 | 36 | steam = { 37 | name = "Steam"; 38 | comment = "Application for managing and playing games on Steam"; 39 | exec = "steam -forcedesktopscaling 1.25 %U"; 40 | terminal = false; 41 | categories = ["Application"]; 42 | mimeType = []; 43 | }; 44 | }; 45 | } 46 | -------------------------------------------------------------------------------- /hosts/zephyrus/specializations/gaming.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | inputs, 4 | pkgs, 5 | ... 6 | }: { 7 | imports = [ 8 | inputs.jovian-nixos.nixosModules.default 9 | inputs.chaotic.nixosModules.default 10 | ]; 11 | 12 | # Use CachyOS' kernel 13 | # To confirm: `zgrep 'SCHED_CLASS' /proc/config.gz` should return `CONFIG_SCHED_CLASS_EXT=y` 14 | boot.kernelPackages = pkgs.linuxPackages_cachyos; 15 | chaotic.scx.enable = true; # by default uses scx_rustland scheduler 16 | 17 | services.displayManager.sddm.enable = lib.mkForce false; 18 | 19 | # Disable services 20 | virtualisation.podman.enable = lib.mkForce false; 21 | virtualisation.libvirtd.enable = lib.mkForce false; 22 | # virtualisation.virtualbox.host.enable = lib.mkForce false; 23 | services.system76-scheduler.enable = lib.mkForce false; # BORE scheduler from CachyOS is used instead 24 | 25 | services.asusd.profileConfig = "Performance"; 26 | services.supergfxd = { 27 | enable = true; 28 | settings = { 29 | "mode" = "ASUSMUXDGPU"; 30 | }; 31 | }; 32 | 33 | jovian = { 34 | hardware.has.amd.gpu = true; 35 | steam = { 36 | enable = true; 37 | user = "arvigeus"; 38 | autoStart = true; 39 | desktopSession = "plasma"; 40 | }; 41 | decky-loader = { 42 | # Steam > Settings > System > Enable Developer Mode 43 | # Steam > Developer > CEF Remote Debugging 44 | enable = true; 45 | user = "arvigeus"; 46 | }; 47 | }; 48 | 49 | environment.sessionVariables = { 50 | MANGOHUD = "1"; # Enable for all Vulkan games 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /hosts/zephyrus/hardware-configuration.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { config, lib, pkgs, modulesPath, ... }: 5 | 6 | { 7 | imports = 8 | [ (modulesPath + "/installer/scan/not-detected.nix") 9 | ]; 10 | 11 | boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ]; 12 | boot.initrd.kernelModules = [ ]; 13 | boot.kernelModules = [ "kvm-amd" ]; 14 | boot.extraModulePackages = [ ]; 15 | 16 | fileSystems."/" = 17 | { device = "/dev/disk/by-uuid/745632f0-e4fe-4b7c-b88c-a916383d8034"; 18 | fsType = "ext4"; 19 | }; 20 | 21 | boot.initrd.luks.devices."luks-3026e8e9-fb4b-446d-aa8b-a7fd5b08817e".device = "/dev/disk/by-uuid/3026e8e9-fb4b-446d-aa8b-a7fd5b08817e"; 22 | 23 | fileSystems."/boot" = 24 | { device = "/dev/disk/by-uuid/4FB2-F7B8"; 25 | fsType = "vfat"; 26 | }; 27 | 28 | swapDevices = 29 | [ { device = "/dev/disk/by-uuid/a5cdd487-c49f-41c0-a875-f1d06b492963"; } 30 | ]; 31 | 32 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 33 | # (the default) this is the recommended approach. When using systemd-networkd it's 34 | # still possible to use this option, but it's recommended to use it in conjunction 35 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 36 | networking.useDHCP = lib.mkDefault true; 37 | # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; 38 | 39 | nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 40 | hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 41 | } 42 | -------------------------------------------------------------------------------- /hosts/zephyrus/plasma-desktop.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: { 6 | # Enable the KDE Plasma Desktop Environment. 7 | services.displayManager.sddm = { 8 | enable = true; 9 | enableHidpi = true; 10 | }; 11 | services.desktopManager.plasma6.enable = true; 12 | 13 | security.pam.services.ssdm.enableKwallet = true; 14 | security.pam.services.ssdm.gnupg.enable = true; 15 | 16 | # Enable Wayland 17 | services.displayManager.sddm.wayland.enable = true; 18 | services.displayManager.defaultSession = "plasma"; 19 | programs.dconf.enable = true; # fix theming issues in GTK apps 20 | 21 | environment.sessionVariables = { 22 | NIXOS_OZONE_WL = "1"; # Wayland support in Chromium and Electron based applications 23 | MOZ_USE_XINPUT2 = "1"; 24 | }; 25 | 26 | xdg.portal.enable = true; 27 | 28 | environment.systemPackages = with pkgs; [ 29 | supergfxctl-plasmoid 30 | ]; 31 | 32 | environment.systemPackages = with pkgs.kdePackages; [ 33 | kio-admin 34 | kate 35 | kget 36 | kaccounts-integration 37 | kaccounts-providers 38 | kio-gdrive 39 | kimageformats 40 | qtimageformats # webp preview in Dolphin 41 | sddm-kcm 42 | filelight 43 | kcalc 44 | kdialog 45 | kwallet 46 | kwallet-pam 47 | kwalletmanager 48 | kdenlive 49 | ]; 50 | 51 | environment.plasma6.excludePackages = with pkgs.kdePackages; [ 52 | elisa 53 | oxygen 54 | ]; 55 | 56 | programs.gnupg.agent.pinentryPackage = pkgs.pinentry-qt; 57 | 58 | programs.kdeconnect.enable = true; 59 | programs.partition-manager.enable = true; # KDE Partition Manager 60 | 61 | home-manager.sharedModules = [inputs.plasma-manager.homeManagerModules.plasma-manager]; 62 | 63 | home-manager.users.arvigeus.imports = [ 64 | ../../apps/plasma-desktop.nix 65 | ]; 66 | } 67 | -------------------------------------------------------------------------------- /apps/chromium.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs.chromium = { 3 | enable = true; 4 | 5 | # package = pkgs.ungoogled-chromium; 6 | enablePlasmaBrowserIntegration = true; 7 | 8 | extensions = [ 9 | "cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock-origin 10 | "nngceckbapebfimnlniiiahkandclblb" # bitwarden-free-password-m 11 | "fmkadmapgofadopljbjfkapdkoienihi" # react-developer-tools 12 | "gppongmhjkpfnbhagpmjfkannfbllamg" # wappalyzer-technology-pro 13 | "gccemnpihkbgkdmoogenkbkckppadcag" # webhint 14 | "ponfpcnoihfmfllpaingbgckeeldkhle" # enhancer-for-youtube 15 | "cnojnbdhbhnkbcieeekonklommdnndci" # search-by-image 16 | "kbfnbcaeplbcioakkpcpgfkobkghlhen" # grammarly-ai-writing-and 17 | "pfldomphmndnmmhhlbekfbafifkkpnbc" # cultivate-amazon-product 18 | "ghnomdcacenbmilgjigehppbamfndblo" # the-camelizer 19 | ]; 20 | 21 | # https://chromeenterprise.google/policies/ 22 | extraOpts = { 23 | BookmarkBarEnabled = true; 24 | BrowserSignin = 0; 25 | DefaultBrowserSettingEnabled = false; 26 | DefaultSearchProviderEnabled = true; 27 | DefaultSearchProviderSearchURL = "https://encrypted.google.com/search?q={searchTerms}&{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}{google:instantExtendedEnabledParameter}ie={inputEncoding}"; 28 | defaultSearchProviderSuggestURL = "https://encrypted.google.com/complete/search?output=chrome&q={searchTerms}"; 29 | PasswordManagerEnabled = false; 30 | ShowAppsShortcutInBookmarkBar = false; 31 | SyncDisabled = true; 32 | AutofillAddressEnabled = true; 33 | AutofillCreditCardEnabled = false; 34 | AllowDeletingBrowserHistory = true; 35 | BuiltInDnsClientEnabled = false; 36 | MetricsReportingEnabled = true; 37 | SearchSuggestEnabled = false; 38 | AlternateErrorPagesEnabled = false; 39 | UrlKeyedAnonymizedDataCollectionEnabled = false; 40 | SpellcheckEnabled = true; 41 | SpellcheckLanguage = ["en-US" "bg"]; 42 | CloudPrintSubmitEnabled = false; 43 | RestoreOnStartup = 1; 44 | }; 45 | }; 46 | 47 | # Allow Google Sync for Chromium 48 | # These keys are from public web 49 | # environment.sessionVariables = { 50 | # GOOGLE_DEFAULT_CLIENT_ID = "77185425430.apps.googleusercontent.com"; 51 | # GOOGLE_DEFAULT_CLIENT_SECRET = "OTJgUOQcT7lO7GsGZq2G4IlT"; 52 | # }; 53 | } 54 | -------------------------------------------------------------------------------- /hosts/zephyrus/specializations/media.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | inputs, 5 | ... 6 | }: { 7 | imports = [ 8 | inputs.nixarr.nixosModules.default 9 | ]; 10 | 11 | services.displayManager.sddm.wayland.enable = lib.mkForce false; 12 | services.desktopManager.plasma6.enable = lib.mkForce false; 13 | xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-kde]; 14 | 15 | services.xserver.enable = true; 16 | services.xserver.desktopManager.kodi = { 17 | enable = true; 18 | package = pkgs.kodi.withPackages (kodiPkgs: 19 | with kodiPkgs; [ 20 | # package = pkgs.kodi-wayland.passthru.withPackages (kodiPkgs: with kodiPkgs; [ 21 | kodi-platform # Includes HDMI CEC support 22 | a4ksubtitles 23 | 24 | ## Streaming 25 | youtube 26 | netflix 27 | sponsorblock 28 | # jellyfin # NOTE: https://jellyfin.org/docs/general/clients/kodi/ 29 | 30 | ## Gaming: https://kodi.wiki/view/Game_add-ons 31 | # joystick 32 | # steam-controller 33 | # libretro 34 | # libretro-nestopia # Nintendo NES / Famicom 35 | 36 | ## Other 37 | pdfreader 38 | ]); 39 | }; 40 | services.displayManager.defaultSession = lib.mkForce "kodi"; 41 | 42 | # https://kodi.wiki/view/Webserver 43 | networking.firewall = { 44 | allowedTCPPorts = [8080]; 45 | allowedUDPPorts = [8080]; 46 | }; 47 | 48 | nixarr = { 49 | enable = true; 50 | # WARNING: Do _not_ set them to `/home/user/whatever`, it will not work! 51 | mediaDir = "/data/media"; 52 | stateDir = "/data/media/.state/nixarr"; 53 | 54 | mediaUsers = ["arvigeus"]; 55 | 56 | jellyfin = { 57 | enable = true; 58 | openFirewall = true; 59 | # These options set up a nginx HTTPS reverse proxy, so you can access 60 | # Jellyfin on your domain with HTTPS 61 | # expose.https = { 62 | # enable = true; 63 | # domainName = "your.domain.com"; 64 | # acmeMail = "your@email.com"; # Required for ACME-bot 65 | # }; 66 | }; 67 | 68 | transmission = { 69 | enable = true; 70 | openFirewall = true; 71 | # vpn.enable = true; 72 | # peerPort = 50000; # Set this to the port forwarded by your VPN 73 | }; 74 | 75 | # It is possible for this module to run the *Arrs through a VPN, but it 76 | # is generally not recommended, as it can cause rate-limiting issues. 77 | bazarr = { 78 | enable = true; 79 | openFirewall = true; 80 | }; 81 | lidarr = { 82 | enable = true; 83 | openFirewall = true; 84 | }; 85 | prowlarr = { 86 | enable = true; 87 | openFirewall = true; 88 | }; 89 | radarr = { 90 | enable = true; 91 | openFirewall = true; 92 | }; 93 | readarr = { 94 | enable = true; 95 | openFirewall = true; 96 | }; 97 | sonarr = { 98 | enable = true; 99 | openFirewall = true; 100 | }; 101 | }; 102 | 103 | services.jellyseerr = { 104 | enable = true; 105 | openFirewall = true; 106 | }; 107 | } 108 | -------------------------------------------------------------------------------- /pkgs/zephyrusctl.nix: -------------------------------------------------------------------------------- 1 | {pkgs}: 2 | pkgs.writeShellApplication { 3 | name = "zephyrusctl"; 4 | runtimeInputs = with pkgs; [ 5 | asusctl 6 | supergfxctl 7 | powertop 8 | libsForQt5.libkscreen 9 | libsForQt5.kdialog 10 | libnotify 11 | ]; 12 | 13 | text = '' 14 | function powersave() { 15 | ${pkgs.asusctl}/bin/asusctl -c 100 16 | ${pkgs.asusctl}/bin/asusctl profile -P Quiet 17 | ${pkgs.libsForQt5.libkscreen}/bin/kscreen-doctor output.eDP-2.mode.21 &> /dev/null 18 | sudo ${pkgs.powertop}/bin/powertop --auto-tune &> /dev/null 19 | printf "Battery Max: 100%%\n" 20 | echo "$(${pkgs.supergfxctl}/bin/supergfxctl --mode Integrated)" 21 | } 22 | 23 | function balanced() { 24 | ${pkgs.asusctl}/bin/asusctl -c 75 25 | ${pkgs.asusctl}/bin/asusctl profile -P Balanced 26 | ${pkgs.libsForQt5.libkscreen}/bin/kscreen-doctor output.eDP-2.mode.0 &> /dev/null 27 | printf "Battery Max: 75%%\n" 28 | echo "$(${pkgs.supergfxctl}/bin/supergfxctl --mode Hybrid)" 29 | } 30 | 31 | function performance() { 32 | ${pkgs.asusctl}/bin/asusctl -c 75 33 | ${pkgs.asusctl}/bin/asusctl profile -P Performance 34 | ${pkgs.libsForQt5.libkscreen}/bin/kscreen-doctor output.eDP-2.mode.0 &> /dev/null 35 | printf "Battery Max: 75%%\n" 36 | echo "$(${pkgs.supergfxctl}/bin/supergfxctl --mode AsusMuxDgpu)" 37 | } 38 | 39 | function get_cpu_mode() { 40 | ${pkgs.asusctl}/bin/asusctl profile -p | awk '{print $NF}' 41 | } 42 | 43 | function get_gpu_mode() { 44 | local gpu_mode 45 | gpu_mode=$(${pkgs.supergfxctl}/bin/supergfxctl -g) 46 | [[ "$gpu_mode" == "AsusMuxDgpu" ]] && gpu_mode="Dedicated" 47 | echo "$gpu_mode" 48 | } 49 | 50 | function get_resolution() { 51 | output=$(${pkgs.libsForQt5.libkscreen}/bin/kscreen-doctor -o | grep "eDP-2") 52 | 53 | # Extract the part of the string that contains the '*' (without the mode index) 54 | starred_part=$(echo "$output" | grep -o "[0-9x@]*\*") 55 | 56 | # Remove the '*' character to isolate the resolution 57 | resolution=''${starred_part%\*} 58 | 59 | echo "$resolution" 60 | } 61 | 62 | function get_status() { 63 | printf "CPU mode: %s\n" "$(get_cpu_mode)" 64 | printf "Graphics mode: %s\n" "$(get_gpu_mode)" 65 | echo "Display: $(get_resolution)" 66 | [ $# -eq 1 ] && printf "\n%s" "$1" 67 | } 68 | 69 | powersave_status="off" 70 | balanced_status="off" 71 | performance_status="off" 72 | status="off" 73 | 74 | case "$(get_cpu_mode)_$(get_gpu_mode)" in 75 | Quiet_Integrated) powersave_status="on" ;; 76 | Balanced_Hybrid) balanced_status="on" ;; 77 | Performance_Dedicated) performance_status="on" ;; 78 | *) status="on" ;; 79 | esac 80 | 81 | selection=$(${pkgs.libsForQt5.kdialog}/bin/kdialog --radiolist "Select profile:" \ 82 | 1 "Powersave" "$powersave_status" \ 83 | 2 "Balanced" "$balanced_status" \ 84 | 3 "Performance" "$performance_status" \ 85 | 4 "? Status" "$status") 86 | 87 | changes="" 88 | case $selection in 89 | 1) changes=$(powersave) ;; 90 | 2) changes=$(balanced) ;; 91 | 3) changes=$(performance) ;; 92 | *) ;; 93 | esac 94 | 95 | result=$(get_status "$changes") 96 | 97 | if [[ -n $result ]]; then 98 | ${pkgs.libnotify}/bin/notify-send --app-name "Asus Zephyrus G14" "Status" "$result" 99 | fi 100 | ''; 101 | } 102 | -------------------------------------------------------------------------------- /apps/helix.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | home.packages = with pkgs; [ 3 | zk 4 | 5 | nixpkgs-review # Used to check rebuilds caused by changes to nixpkgs 6 | 7 | cargo # Package manager 8 | rustc # Compiler 9 | ]; 10 | 11 | programs.helix = { 12 | enable = true; 13 | 14 | settings = { 15 | theme = "onedark"; 16 | editor = { 17 | bufferline = "multiple"; 18 | lsp = { 19 | enable = true; 20 | display-messages = true; 21 | display-inlay-hints = true; 22 | }; 23 | indent-guides.render = true; 24 | cursorline = true; 25 | cursorcolumn = true; 26 | color-modes = true; 27 | statusline = { 28 | left = [ 29 | "mode" 30 | "spinner" 31 | "file-name" 32 | "separator" 33 | "file-modification-indicator" 34 | ]; 35 | right = [ 36 | "diagnostics" 37 | "separator" 38 | "file-type" 39 | "separator" 40 | "selections" 41 | "separator" 42 | "position" 43 | "file-encoding" 44 | ]; 45 | separator = ""; 46 | }; 47 | }; 48 | }; 49 | 50 | extraPackages = with pkgs; [ 51 | nodePackages.bash-language-server 52 | shellcheck # More diagnostics for language server 53 | 54 | omnisharp-roslyn 55 | 56 | nodePackages.typescript-language-server 57 | 58 | nil # lsp 59 | 60 | rust-analyzer # Language server 61 | rustfmt # Formatter 62 | 63 | pkgs.nodePackages.prettier 64 | ]; 65 | languages = { 66 | language-server = { 67 | zk = { 68 | command = "zk"; 69 | args = ["lsp"]; 70 | }; 71 | rust-analyzer = { 72 | config = { 73 | checkOnSave.command = "clippy"; 74 | # Careful! If you enable this, then a lot of errors 75 | # will no longer show up in Helix. Do not enable it. 76 | # cargo.allFeatures = true; <- do NOT enable me 77 | }; 78 | }; 79 | }; 80 | language = [ 81 | { 82 | name = "bash"; 83 | auto-format = true; 84 | indent = { 85 | tab-width = 4; 86 | unit = " "; 87 | }; 88 | formatter.command = "${pkgs.shfmt}/bin/shfmt"; 89 | } 90 | { 91 | name = "c-sharp"; 92 | auto-format = true; 93 | } 94 | { 95 | name = "javascript"; 96 | auto-format = true; 97 | } 98 | { 99 | name = "typescript"; 100 | formatter = { 101 | command = "prettier"; 102 | args = ["--parser" "typescript"]; 103 | }; 104 | auto-format = true; 105 | } 106 | { 107 | name = "json"; 108 | formatter = { 109 | command = "prettier"; 110 | args = ["--parser" "json"]; 111 | }; 112 | auto-format = true; 113 | } 114 | { 115 | name = "markdown"; 116 | auto-format = true; 117 | indent = { 118 | tab-width = 4; 119 | unit = " "; 120 | }; 121 | # Use zk instead of default lsp 122 | roots = [".zk"]; 123 | language-servers = ["zk"]; 124 | } 125 | { 126 | name = "html"; 127 | formatter = { 128 | command = "prettier"; 129 | args = ["--parser" "html"]; 130 | }; 131 | } 132 | { 133 | name = "css"; 134 | formatter = { 135 | command = "prettier"; 136 | args = ["--parser" "css"]; 137 | }; 138 | } 139 | { 140 | name = "nix"; 141 | auto-format = true; 142 | formatter.command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"; 143 | } 144 | { 145 | name = "rust"; 146 | auto-format = true; 147 | formatter.command = "${pkgs.rustfmt}/bin/rustfmt"; 148 | } 149 | ]; 150 | }; 151 | }; 152 | } 153 | -------------------------------------------------------------------------------- /apps/starship.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: { 2 | programs.starship = { 3 | enable = true; 4 | enableBashIntegration = true; 5 | settings = { 6 | format = lib.concatStrings [ 7 | "$os" 8 | "[](fg:#2d344a bg:#394260)" 9 | "$directory" 10 | "[ ](#394260)" 11 | "$fill" 12 | "$git_branch" 13 | "$git_commit" 14 | "$git_state" 15 | "$git_metrics" 16 | "$git_status" 17 | "$docker_context" 18 | "$package" 19 | "$cmake" 20 | "$deno" 21 | "$dotnet" 22 | "$nodejs" 23 | "$rust" 24 | "$nix_shell" 25 | "$azure" 26 | "$jobs" 27 | "$container" 28 | "$line_break" 29 | "$character" 30 | ]; 31 | 32 | os = { 33 | format = "[ $symbol ](fg:#9ECBFF bg:#2d344a)"; 34 | disabled = false; 35 | 36 | symbols = { 37 | Linux = " "; 38 | NixOS = " "; 39 | Unknown = " "; 40 | }; 41 | }; 42 | 43 | directory = { 44 | home_symbol = " "; 45 | truncation_length = 2; 46 | truncation_symbol = "▦ "; 47 | format = "[ $read_only$path ]($style)"; 48 | style = "fg:#a0a9cb bg:#394260"; 49 | read_only = "󰌾 "; 50 | 51 | substitutions = { 52 | Documents = " 󰈙 "; 53 | Downloads = "  "; 54 | Music = "  "; 55 | Pictures = "  "; 56 | Videos = " 󰈰 "; 57 | }; 58 | }; 59 | 60 | fill = { 61 | symbol = "-"; 62 | style = "bold bright-black"; 63 | }; 64 | 65 | character = { 66 | format = "$symbol"; 67 | success_symbol = "[❯ ](bold green)"; 68 | error_symbol = "[❯ ](bold red)"; 69 | }; 70 | 71 | git_branch = { 72 | symbol = "[󰊢](bold #f15639)"; 73 | format = "[ $symbol $branch(:$remote_branch)]($style)"; 74 | style = "bold white"; 75 | }; 76 | 77 | git_status = { 78 | style = "bold white"; 79 | format = " ([$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed]($style))"; 80 | conflicted = "[◪◦](bold bright-magenta)"; 81 | ahead = "[▲│[\${count}](bold white)│](bold green)"; 82 | behind = "[▽│[\${count}](bold white)│](bold red)"; 83 | diverged = "[◇ ▲┤[\${ahead_count}](regular white)│▽┤[\${behind_count}](regular white)│](bold bright-magenta)"; 84 | untracked = "[◌◦](bold bright-yellow)"; 85 | stashed = "[◦◫◦](bold white)"; 86 | modified = "[●◦](bold yellow)"; 87 | staged = "[■┤[$count](bold white)│](bold bright-cyan)"; 88 | renamed = "[◎◦](bold bright-blue)"; 89 | deleted = "[✕](bold red)"; 90 | }; 91 | 92 | jobs = { 93 | symbol = "[▶](blue bold)"; 94 | format = " [$symbol $number]($style)"; 95 | style = "white"; 96 | }; 97 | 98 | docker_context = { 99 | symbol = " "; 100 | format = " [](fg:#0895e7)[$symbol $context](italic fg:black bg:#0895e7)[](fg:#0895e7)"; 101 | }; 102 | 103 | nix_shell = { 104 | symbol = " "; 105 | format = " [$symbol $state $name]($style)"; 106 | }; 107 | 108 | nodejs = { 109 | symbol = ""; 110 | format = " [](fg:#84ba64)[$symbol ($version)](italic fg:black bg:#84ba64)[](fg:#84ba64)"; 111 | }; 112 | 113 | deno = { 114 | symbol = "∫"; 115 | format = " [](fg:#6af2a6)[$symbol $version](italic fg:black bg:#6af2a6)[](fg:#6af2a6)"; 116 | }; 117 | 118 | package = { 119 | symbol = "󰏗"; 120 | format = " [](fg:#ffc832)[$symbol $version](italic fg:black bg:#ffc832)[](fg:#ffc832)"; 121 | }; 122 | 123 | rust = { 124 | symbol = ""; 125 | format = " [](fg:#994d0d)[$symbol $version](italic fg:black bg:#994d0d)[](fg:#994d0d)"; 126 | }; 127 | 128 | azure = { 129 | symbol = " "; 130 | }; 131 | 132 | dotnet = { 133 | symbol = "󰪮"; 134 | format = " [](fg:#7114e7)[$symbol ($version)](italic fg:black bg:#7114e7)[](fg:#7114e7)"; 135 | }; 136 | }; 137 | }; 138 | } 139 | -------------------------------------------------------------------------------- /apps/plasma-desktop.nix: -------------------------------------------------------------------------------- 1 | {config, ...}: { 2 | programs.plasma = { 3 | enable = true; 4 | 5 | workspace = { 6 | clickItemTo = "open"; 7 | lookAndFeel = "org.kde.breezedark.desktop"; 8 | }; 9 | 10 | kwin = { 11 | titlebarButtons = { 12 | left = ["close" "maximize" "minimize" "application-menu"]; 13 | right = ["help" "on-all-desktops" "keep-above-windows"]; 14 | }; 15 | }; 16 | 17 | shortcuts = { 18 | "services/asusctl.desktop"."_launch" = "Launch (4)"; # Fn + F5 19 | "services/zephyrusctl.desktop"."_launch" = "Launch (1)"; # M4 20 | "services/org.kde.kcalc.desktop"."_launch" = []; # KCalc is very eager to hijack M4 21 | }; 22 | 23 | configFile = { 24 | "ksmserverrc"."General"."loginMode".value = "emptySession"; 25 | "dolphinrc"."General"."BrowseThroughArchives".value = true; 26 | "kdeglobals"."General"."accentColorFromWallpaper".value = true; 27 | "kglobalshortcutsrc"."KDE Keyboard Layout Switcher"."_k_friendly_name".value = "Keyboard Layout Switcher"; 28 | "kglobalshortcutsrc"."asusctl.desktop"."_k_friendly_name".value = "sprofile -n && notify-send \"Power Profile\" \"$(asusctl profile -p)\""; 29 | "kglobalshortcutsrc"."zephyrusctl.desktop"."_k_friendly_name".value = "zephyrusctl"; 30 | "kscreenlockerrc"."Greeter"."WallpaperPlugin".value = "org.kde.potd"; 31 | "kscreenlockerrc"."Greeter/Wallpaper/org.kde.potd/General"."Provider".value = "bing"; 32 | "ksplashrc"."KSplash"."Engine".value = "none"; 33 | "kwalletrc"."Wallet"."First Use".value = false; 34 | "kwinrc"."Windows"."BorderlessMaximizedWindows".value = true; 35 | "kwinrc"."Xwayland"."Scale".value = 1; 36 | "kwinrulesrc"."1"."Description".value = "Window settings for firefox"; 37 | "kwinrulesrc"."1"."above".value = true; 38 | "kwinrulesrc"."1"."aboverule".value = 2; 39 | "kwinrulesrc"."1"."position".value = "1280,842"; 40 | "kwinrulesrc"."1"."positionrule".value = 4; 41 | "kwinrulesrc"."1"."size".value = "768,384"; 42 | "kwinrulesrc"."1"."sizerule".value = 4; 43 | "kwinrulesrc"."1"."skiptaskbar".value = true; 44 | "kwinrulesrc"."1"."skiptaskbarrule".value = 2; 45 | "kwinrulesrc"."1"."title".value = "Picture-in-Picture"; 46 | "kwinrulesrc"."1"."titlematch".value = 1; 47 | "kwinrulesrc"."1"."types".value = 1; 48 | "kwinrulesrc"."1"."wmclass".value = "firefox"; 49 | "kwinrulesrc"."1"."wmclassmatch".value = 1; 50 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."Description".value = "Window settings for firefox"; 51 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."above".value = true; 52 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."aboverule".value = 3; 53 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."position".value = "1353,833"; 54 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."positionrule".value = 4; 55 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."size".value = "683,384"; 56 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."sizerule".value = 4; 57 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."title".value = "Picture-in-Picture"; 58 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."titlematch".value = 1; 59 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."types".value = 1; 60 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."wmclass".value = "firefox"; 61 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."wmclasscomplete".value = true; 62 | "kwinrulesrc"."78315bde-2c1a-488f-bbee-7b8dfbf4cc3a"."wmclassmatch".value = 1; 63 | "kwinrulesrc"."General"."count".value = 1; 64 | "kwinrulesrc"."General"."rules".value = 1; 65 | "kxkbrc"."Layout"."DisplayNames".value = ","; 66 | "kxkbrc"."Layout"."LayoutList".value = "us,bg"; 67 | "kxkbrc"."Layout"."Options".value = "terminate:ctrl_alt_bksp,grp:alt_shift_toggle"; 68 | "kxkbrc"."Layout"."ResetOldOptions".value = true; 69 | "kxkbrc"."Layout"."SwitchMode".value = "Window"; 70 | "kxkbrc"."Layout"."Use".value = true; 71 | "kxkbrc"."Layout"."VariantList".value = ",phonetic"; 72 | "plasma-localerc"."Formats"."LANG".value = "en_US.UTF-8"; 73 | }; 74 | }; 75 | 76 | programs.konsole = { 77 | enable = true; 78 | 79 | defaultProfile = "default"; 80 | profiles.default = { 81 | name = "default"; 82 | font = { 83 | name = "FiraCode Nerd Font Mono"; 84 | }; 85 | }; 86 | }; 87 | 88 | # TODO: Set font (https://github.com/pjones/plasma-manager/issues/87) 89 | # programs.kate = { 90 | # enable = true; 91 | # }; 92 | 93 | home = { 94 | # Fix Wayland cursor size for some apps 95 | file."${config.xdg.dataHome}/icons/default/index.theme".text = '' 96 | [Icon Theme] 97 | Inherits=breeze_cursors 98 | ''; 99 | }; 100 | } 101 | -------------------------------------------------------------------------------- /apps/firefox.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | programs.firefox = { 3 | enable = true; 4 | profiles = { 5 | default = { 6 | id = 0; 7 | name = "default"; 8 | isDefault = true; 9 | # https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 10 | extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 11 | ublock-origin 12 | multi-account-containers 13 | bitwarden 14 | plasma-integration 15 | 16 | react-devtools 17 | wappalyzer 18 | web-developer 19 | webhint 20 | 21 | enhancer-for-youtube 22 | search-by-image 23 | grammarly 24 | 25 | # cultivate 26 | # the-camelizer 27 | ]; 28 | settings = { 29 | "widget.use-xdg-desktop-portal.file-picker" = 1; 30 | "identity.fxaccounts.enabled" = false; 31 | "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; 32 | "browser.shell.checkDefaultBrowser" = false; 33 | "browser.shell.defaultBrowserCheckCount" = 1; 34 | "browser.startup.page" = 3; # Restore session 35 | "browser.tabs.inTitlebar" = 0; # Use system's titlebar 36 | "dom.webgpu.enabled" = true; 37 | 38 | # Enable HTTPS-Only Mode 39 | "dom.security.https_only_mode" = true; 40 | "dom.security.https_only_mode_ever_enabled" = true; 41 | 42 | # Privacy settings 43 | "privacy.donottrackheader.enabled" = true; 44 | "privacy.trackingprotection.enabled" = true; 45 | "privacy.trackingprotection.socialtracking.enabled" = true; 46 | "privacy.partition.network_state.ocsp_cache" = true; 47 | 48 | # Disable Pocket Integration 49 | "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; 50 | "extensions.pocket.enabled" = false; 51 | "extensions.pocket.api" = ""; 52 | "extensions.pocket.oAuthConsumerKey" = ""; 53 | "extensions.pocket.showHome" = false; 54 | "extensions.pocket.site" = ""; 55 | }; 56 | # userChrome = '' 57 | # .titlebar-buttonbox-container {display:none !important;} 58 | # ''; 59 | search = { 60 | force = true; # allows this setting to work 61 | engines = { 62 | "Phind" = { 63 | urls = [{template = "https://www.phind.com/search?q={searchTerms}";}]; 64 | iconUpdateURL = "https://www.phind.com/favicon.ico"; 65 | # updateInterval = 24 * 60 * 60 * 1000; # every day 66 | definedAliases = ["@nw"]; 67 | }; 68 | 69 | "MyNixOS" = { 70 | urls = [ 71 | { 72 | template = "https://mynixos.com/search"; 73 | params = [ 74 | { 75 | name = "q"; 76 | value = "{searchTerms}"; 77 | } 78 | ]; 79 | } 80 | ]; 81 | iconUpdateURL = "https://mynixos.com/favicon.ico"; 82 | definedAliases = ["@np"]; 83 | }; 84 | 85 | "NixOS Wiki" = { 86 | urls = [{template = "https://wiki.nixos.org/w/index.php?search={searchTerms}";}]; 87 | icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; 88 | definedAliases = ["@nw"]; 89 | }; 90 | 91 | "Sourcegraph NixOS" = { 92 | urls = [{template = "https://sourcegraph.com/search?q=context:global+fork:no+lang:nix+{searchTerms}";}]; 93 | iconUpdateURL = "https://sourcegraph.com/favicon.png"; 94 | definedAliases = ["@sn"]; 95 | }; 96 | 97 | "GitHub NixOS" = { 98 | urls = [{template = "https://github.com/search?q=language%3Anix+NOT+is%3Afork+{searchTerms}&type=code";}]; 99 | iconUpdateURL = "https://github.com/favicon.ico"; 100 | definedAliases = ["@gn"]; 101 | }; 102 | 103 | "Kagi" = { 104 | urls = [{template = "https://www.kagi.com/search?q={searchTerms}";}]; 105 | iconUpdateURL = "https://www.kagi.com/favicon.ico"; 106 | # updateInterval = 24 * 60 * 60 * 1000; # every day 107 | definedAliases = ["@k"]; 108 | }; 109 | 110 | "Ecosia" = { 111 | urls = [{template = "https://www.ecosia.org/search?q={searchTerms}";}]; 112 | iconUpdateURL = "https://www.ecosia.org/static/icons/favicon.ico"; 113 | # updateInterval = 24 * 60 * 60 * 1000; # every day 114 | definedAliases = ["@e"]; 115 | }; 116 | 117 | "DuckDuckGo" = { 118 | urls = [{template = "https://duckduckgo.com/?q={searchTerms}";}]; 119 | iconUpdateURL = "https://duckduckgo.com/favicon.ico"; 120 | # updateInterval = 24 * 60 * 60 * 1000; # every day 121 | definedAliases = ["@ddg"]; 122 | }; 123 | 124 | # Independant search engine 125 | "Mojeek" = { 126 | urls = [{template = "https://www.mojeek.com/search?q={searchTerms}";}]; 127 | iconUpdateURL = "https://www.mojeek.com/favicon.ico"; 128 | # updateInterval = 24 * 60 * 60 * 1000; # every day 129 | definedAliases = ["@mj"]; 130 | }; 131 | 132 | "Bing".metaData.hidden = true; 133 | "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias 134 | }; 135 | }; 136 | }; 137 | }; 138 | }; 139 | } 140 | -------------------------------------------------------------------------------- /apps/vscode.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | programs.vscode = { 3 | enable = true; 4 | package = pkgs.vscodium; 5 | 6 | mutableExtensionsDir = false; 7 | enableUpdateCheck = false; 8 | enableExtensionUpdateCheck = false; 9 | 10 | extensions = with pkgs.open-vsx; 11 | [ 12 | # https://raw.githubusercontent.com/nix-community/nix-vscode-extensions/master/data/cache/open-vsx-latest.json 13 | 14 | # Essentials 15 | mikestead.dotenv 16 | editorconfig.editorconfig 17 | 18 | # Interface Improvements 19 | eamodio.gitlens 20 | usernamehw.errorlens 21 | pflannery.vscode-versionlens 22 | yoavbls.pretty-ts-errors 23 | wix.vscode-import-cost 24 | gruntfuggly.todo-tree 25 | zhuangtongfa.material-theme 26 | 27 | # Web Dev 28 | # dbaeumer.vscode-eslint 29 | esbenp.prettier-vscode 30 | csstools.postcss 31 | stylelint.vscode-stylelint 32 | bradlc.vscode-tailwindcss 33 | davidanson.vscode-markdownlint 34 | unifiedjs.vscode-mdx 35 | # zenclabs.previewjs # Error: EROFS: read-only file system 36 | 37 | # Deno 38 | denoland.vscode-deno 39 | 40 | # GraphQL 41 | graphql.vscode-graphql-syntax 42 | graphql.vscode-graphql 43 | 44 | # Nix 45 | jnoortheen.nix-ide 46 | jetpack-io.devbox 47 | arrterian.nix-env-selector 48 | 49 | # Bash 50 | mads-hartmann.bash-ide-vscode 51 | mkhl.shfmt 52 | 53 | # Testing 54 | vitest.explorer 55 | ms-playwright.playwright 56 | firefox-devtools.vscode-firefox-debug 57 | ms-vscode.test-adapter-converter 58 | mtxr.sqltools 59 | mtxr.sqltools-driver-pg 60 | ] 61 | ++ (with pkgs.vscode-marketplace; [ 62 | # https://raw.githubusercontent.com/nix-community/nix-vscode-extensions/master/data/cache/vscode-marketplace-latest.json 63 | dbaeumer.vscode-eslint 64 | mtxr.sqltools-driver-sqlite 65 | ms-vscode-remote.vscode-remote-extensionpack 66 | ms-vscode.remote-explorer 67 | ms-vsliveshare.vsliveshare 68 | codeforge.remix-forge 69 | amodio.toggle-excluded-files 70 | ]); 71 | 72 | userSettings = { 73 | "window.titleBarStyle" = "custom"; 74 | "workbench.colorTheme" = "One Dark Pro Flat"; 75 | "editor.fontFamily" = "'FiraCode Nerd Font', 'FiraCode Nerd Font Mono', 'monospace', monospace"; 76 | "editor.inlineSuggest.enabled" = true; 77 | 78 | "testExplorer.useNativeTesting" = true; # TODO: doesn't seem to be a valid option 79 | 80 | "git.autofetch" = true; 81 | "git.confirmSync" = false; 82 | "git.enableCommitSigning" = true; 83 | 84 | "[html]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 85 | "[css]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 86 | "[markdown]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 87 | "[javascript]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 88 | "[json]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 89 | "[jsonc]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 90 | "[nix]"."editor.defaultFormatter" = "jnoortheen.nix-ide"; 91 | "[scss]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 92 | "[typescript]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 93 | "[typescriptreact]"."editor.defaultFormatter" = "esbenp.prettier-vscode"; 94 | 95 | "nix.enableLanguageServer" = true; 96 | "nix.formatterPath" = "${pkgs.alejandra}/bin/alejandra"; 97 | "nix.serverPath" = "${pkgs.nil}/bin/nil"; 98 | "nix.serverSettings"."nil"."formatting"."command" = ["${pkgs.alejandra}/bin/alejandra"]; 99 | 100 | "bashIde.shellcheckPath" = "${pkgs.shellcheck}/bin/shellcheck"; 101 | "shfmt.executablePath" = "${pkgs.shfmt}/bin/shfmt"; 102 | 103 | "errorLens.gutterIconsEnabled" = true; 104 | "errorLens.messageMaxChars" = 0; 105 | 106 | "todo-tree.general.statusBar" = "total"; 107 | "todo-tree.highlights.highlightDelay" = 0; 108 | "todo-tree.highlights.customHighlight.TODO.type" = "text"; 109 | "todo-tree.highlights.customHighlight.TODO.foreground" = "black"; 110 | "todo-tree.highlights.customHighlight.TODO.background" = "green"; 111 | "todo-tree.highlights.customHighlight.TODO.iconColour" = "green"; 112 | "todo-tree.highlights.customHighlight.TODO.icon" = "shield-check"; 113 | "todo-tree.highlights.customHighlight.TODO.gutterIcon" = true; 114 | "todo-tree.highlights.customHighlight.FIXME.type" = "text"; 115 | "todo-tree.highlights.customHighlight.FIXME.foreground" = "black"; 116 | "todo-tree.highlights.customHighlight.FIXME.background" = "yellow"; 117 | "todo-tree.highlights.customHighlight.FIXME.iconColour" = "yellow"; 118 | "todo-tree.highlights.customHighlight.FIXME.icon" = "shield"; 119 | "todo-tree.highlights.customHighlight.FIXME.gutterIcon" = true; 120 | "todo-tree.highlights.customHighlight.HACK.type" = "text"; 121 | "todo-tree.highlights.customHighlight.HACK.foreground" = "black"; 122 | "todo-tree.highlights.customHighlight.HACK.background" = "red"; 123 | "todo-tree.highlights.customHighlight.HACK.iconColour" = "red"; 124 | "todo-tree.highlights.customHighlight.HACK.icon" = "shield-x"; 125 | "todo-tree.highlights.customHighlight.HACK.gutterIcon" = true; 126 | "todo-tree.highlights.customHighlight.BUG.type" = "text"; 127 | "todo-tree.highlights.customHighlight.BUG.foreground" = "black"; 128 | "todo-tree.highlights.customHighlight.BUG.background" = "orange"; 129 | "todo-tree.highlights.customHighlight.BUG.iconColour" = "orange"; 130 | "todo-tree.highlights.customHighlight.BUG.icon" = "bug"; 131 | "todo-tree.highlights.customHighlight.BUG.gutterIcon" = true; 132 | }; 133 | }; 134 | } 135 | -------------------------------------------------------------------------------- /hosts/zephyrus/configuration.nix: -------------------------------------------------------------------------------- 1 | # Edit this configuration file to define what should be installed on 2 | # your system. Help is available in the configuration.nix(5) man page 3 | # and in the NixOS manual (accessible by running ‘nixos-help’). 4 | { 5 | pkgs, 6 | inputs, 7 | ... 8 | }: { 9 | imports = with inputs.nixos-hardware.nixosModules; [ 10 | asus-zephyrus-ga402 11 | asus-battery 12 | ]; 13 | 14 | # Enable networking 15 | networking.networkmanager.enable = true; 16 | 17 | networking.hostName = "zephyrus"; # Define your hostname. 18 | # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 19 | 20 | # Configure network proxy if necessary 21 | # networking.proxy.default = "http://user:password@proxy:port/"; 22 | # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 23 | 24 | # Enable the OpenSSH daemon. 25 | # services.openssh.enable = true; 26 | 27 | # Open ports in the firewall. 28 | # networking.firewall.allowedTCPPorts = [ ... ]; 29 | # networking.firewall.allowedUDPPorts = [ ... ]; 30 | # Or disable the firewall altogether. 31 | # networking.firewall.enable = false; 32 | 33 | # Set your time zone. 34 | time.timeZone = "Asia/Ho_Chi_Minh"; 35 | 36 | # Select internationalisation properties. 37 | i18n.defaultLocale = "en_US.UTF-8"; 38 | 39 | i18n.extraLocaleSettings = { 40 | LC_ADDRESS = "en_GB.UTF-8"; 41 | LC_IDENTIFICATION = "en_GB.UTF-8"; 42 | LC_MEASUREMENT = "en_GB.UTF-8"; 43 | LC_MONETARY = "en_GB.UTF-8"; 44 | LC_NAME = "en_GB.UTF-8"; 45 | LC_NUMERIC = "en_GB.UTF-8"; 46 | LC_PAPER = "en_GB.UTF-8"; 47 | LC_TELEPHONE = "en_GB.UTF-8"; 48 | LC_TIME = "en_GB.UTF-8"; 49 | }; 50 | 51 | # Enable CUPS to print documents. 52 | # services.printing.enable = true; 53 | 54 | # Enables proprietary firmware for enhanced hardware support 55 | hardware.enableRedistributableFirmware = true; 56 | 57 | # AMD GPU Configuration 58 | hardware.amdgpu.opencl.enable = true; 59 | hardware.amdgpu.loadInInitrd = true; 60 | 61 | # Enables hybrid graphics management and ASUS-specific hardware control. 62 | # https://asus-linux.org/wiki/nixos/ 63 | services.supergfxd = { 64 | enable = true; 65 | }; 66 | services.asusd = { 67 | enable = true; 68 | enableUserService = true; 69 | package = pkgs.asusctl; 70 | }; 71 | 72 | systemd.services.lact = { 73 | description = "AMDGPU Control Daemon"; 74 | after = ["multi-user.target"]; 75 | wantedBy = ["multi-user.target"]; 76 | serviceConfig = { 77 | ExecStart = "${pkgs.lact}/bin/lact daemon"; 78 | }; 79 | enable = true; 80 | }; 81 | 82 | services.system76-scheduler.enable = true; 83 | 84 | # Battery 85 | hardware.asus.battery.chargeUpto = 75; 86 | 87 | # Enable bluetooth 88 | hardware.bluetooth.enable = true; 89 | hardware.bluetooth.powerOnBoot = true; 90 | 91 | # Support for Logitech Unified Reciever 92 | hardware.logitech.wireless.enable = true; 93 | hardware.logitech.wireless.enableGraphical = true; 94 | 95 | # Enable sound with pipewire. 96 | sound.enable = true; 97 | hardware.pulseaudio.enable = false; 98 | security.rtkit.enable = true; 99 | services.pipewire = { 100 | enable = true; 101 | alsa.enable = true; 102 | alsa.support32Bit = true; 103 | pulse.enable = true; 104 | # If you want to use JACK applications, uncomment this 105 | #jack.enable = true; 106 | 107 | # use the example session manager (no others are packaged yet so this is enabled by default, 108 | # no need to redefine it in your config for now) 109 | #media-session.enable = true; 110 | }; 111 | 112 | # Allow unfree packages 113 | nixpkgs.config.allowUnfree = true; 114 | 115 | # List packages installed in system profile. To search, run: 116 | # $ nix search wget 117 | environment.systemPackages = with pkgs; [ 118 | # System tools 119 | git 120 | wget 121 | powertop 122 | gnumake 123 | clinfo 124 | vulkan-tools 125 | wayland-utils 126 | glxinfo 127 | pciutils 128 | fwupd 129 | killall 130 | fastfetch 131 | btop 132 | lact 133 | p7zip 134 | unzip 135 | unrar 136 | whois 137 | libnotify 138 | icoutils # Display exe icons 139 | 140 | # Containers 141 | appimage-run 142 | 143 | # Custom packages 144 | zephyrusctl 145 | ]; 146 | 147 | services.flatpak.enable = true; 148 | fonts.fontDir.enable = true; # allow Flatpak apps to use system fonts 149 | 150 | fonts = { 151 | packages = with pkgs; [ 152 | noto-fonts 153 | noto-fonts-cjk 154 | noto-fonts-emoji 155 | liberation_ttf 156 | fira-code 157 | fira-code-symbols 158 | corefonts # Microsoft free fonts 159 | dejavu_fonts 160 | inconsolata # monospaced 161 | nerdfonts 162 | source-code-pro 163 | source-sans-pro 164 | source-serif-pro 165 | ubuntu_font_family 166 | unifont # some international languages 167 | ]; 168 | fontconfig = { 169 | defaultFonts = { 170 | monospace = ["Source Code Pro"]; 171 | sansSerif = ["Source Sans Pro"]; 172 | serif = ["Source Serif Pro"]; 173 | }; 174 | }; 175 | }; 176 | 177 | # Storage optimization 178 | nix.settings.auto-optimise-store = true; 179 | 180 | programs.nh = { 181 | enable = true; 182 | clean.enable = true; 183 | clean.extraArgs = "--keep-since 7d --keep 3"; 184 | }; 185 | 186 | # Some programs need SUID wrappers, can be configured further or are 187 | # started in user sessions. 188 | programs.mtr.enable = true; 189 | programs.gnupg.agent = { 190 | enable = true; 191 | enableSSHSupport = true; 192 | }; 193 | 194 | # List services that you want to enable: 195 | 196 | # This value determines the NixOS release from which the default 197 | # settings for stateful data, like file locations and database versions 198 | # on your system were taken. It‘s perfectly fine and recommended to leave 199 | # this value at the release version of the first install of this system. 200 | # Before changing this value read the documentation for this option 201 | # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). 202 | system.stateVersion = "23.11"; # Did you read the comment? 203 | } 204 | -------------------------------------------------------------------------------- /hosts/zephyrus/README.md: -------------------------------------------------------------------------------- 1 | # [ROG Zephyrus G14 (2022) GA402RK-L8149](https://rog.asus.com/laptops/rog-zephyrus/rog-zephyrus-g14-2022-series/spec/) 2 | 3 | | Specification Category | Details | 4 | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | 5 | | Processor | [AMD Ryzen™ 9 6900HS Mobile Processor](https://www.amd.com/en/products/apu/amd-ryzen-9-6900hs)
Zen 3
8-core/16-thread
20MB cache
3.3 GHz up to 4.9 GHz max boost
[Benchmarks](https://www.cpubenchmark.net/cpu.php?cpu=AMD+Ryzen+9+6900HS&id=4751) | 6 | | Graphics | [AMD Radeon™ RX 6800S](https://www.amd.com/en/products/graphics/amd-radeon-rx-6800s)
ROG Boost: up to 105W(SmartShift)
8GB GDDR6
AMD FreeSync Technology
AMD Smart Access Memory
AMD SmartShift Technology
[Benchmark](https://www.notebookcheck.net/AMD-Radeon-RX-6800S-GPU-Benchmarks-and-Specs.590207.0.html) | 7 | | Display | ROG Nebula Display
14-inch
QHD+ 16:10 (2560 x 1600, WQXGA)
Brightness: 500 nt
IPS-level
Anti-glare display
DCI-P3: 100%
Refresh Rate: 120Hz
Response Time: 3ms
Adaptive-Sync
Pantone Validated
MUX Switch
Support Dolby Vision HDR : Yes | 8 | | Memory | 16GB DDR5 on board
16GB DDR5-4800 SO-DIMM
Max Capacity: 24GB
Used slots: 1
Max slots: 1 | 9 | | Storage | 1TB PCIe® 4.0 NVMe™ M.2 SSD | 10 | | I/O Ports | 1x 3.5mm Combo Audio Jack
1x HDMI 2.0b
2x USB 3.2 Gen 2 Type-A
1x USB 3.2 Gen 2 Type-C support DisplayPort™
1x USB 3.2 Gen 2 Type-C support DisplayPort™ / power delivery
1x card reader (microSD) (UHS-II) | 11 | | Keyboard and Touchpad | Backlit Chiclet Keyboard 1-Zone RGB
Touchpad | 12 | | Camera | 720P HD IR Camera for Windows Hello | 13 | | Audio | Smart Amp Technology
Dolby Atmos
AI noise-canceling technology
Hi-Res certification (for headphone)
Built-in 3-microphone array
4-speaker system with Smart Amplifier Technology | 14 | | Network and Communication | ~~[MediaTek MT7922A22M](https://techinfodepot.shoutwiki.com/wiki/MediaTek_MT7922A22M_Reference_Design)~~
[Intel AX200 NGW](https://www.intel.com/content/www/us/en/products/sku/189347/intel-wifi-6-ax200-gig/specifications.html) (_NOTE: The highest supported wireless card is Intel AX210. The only difference is that it supports WiFi 6E_)
WiFi 6
Bluetooth 5.2 | 15 | | Battery | 76WHrs, 4S1P, 4-cell Li-ion | 16 | | Power Supply | ø6.0, 240W AC Adapter, Output: 20V DC, 12A, 240W, Input: 100\~240C AC 50/60Hz universal
TYPE-C, 100W AC Adapter, Output: 20V DC, 5A, 100W, Input: 100\~240V AC 50/60Hz universal | 17 | | Weight | 1.65 Kg (3.64 lbs) | 18 | | Dimensions (W x D x H) | 31.2 x 22.7 x 1.85 \~ 1.85 cm (12.28" x 8.94" x 0.73" \~ 0.73") | 19 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "NixOS Flake"; 3 | 4 | # This is the standard format for flake.nix. 5 | # `inputs` are the dependencies of the flake, 6 | # and `outputs` function will return all the build results of the flake. 7 | # Each item in `inputs` will be passed as a parameter to 8 | # the `outputs` function after being pulled and built. 9 | inputs = { 10 | # There are many ways to reference flake inputs. 11 | # The most widely used is `github:owner/name/reference`, 12 | # which represents the GitHub repository URL + branch/commit-id/tag. 13 | 14 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # NixOS unstable channel 15 | nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-23.11"; # NixOS release channel 16 | nixpkgs-master.url = "github:NixOS/nixpkgs/master"; 17 | # Also see the 'stable-packages' and 'master-packages' overlays at 'overlays/default.nix'. 18 | 19 | nixos-hardware.url = "github:NixOS/nixos-hardware/master"; # NixOS hardware channel 20 | 21 | home-manager = { 22 | url = "github:nix-community/home-manager"; # Home Manager release channel 23 | # The `follows` keyword in inputs is used for inheritance. 24 | # Here, `inputs.nixpkgs` of home-manager is kept consistent with 25 | # the `inputs.nixpkgs` of the current flake, 26 | # to avoid problems caused by different versions of nixpkgs. 27 | inputs.nixpkgs.follows = "nixpkgs"; 28 | }; 29 | 30 | plasma-manager.url = "github:pjones/plasma-manager"; 31 | plasma-manager.inputs.nixpkgs.follows = "nixpkgs"; 32 | plasma-manager.inputs.home-manager.follows = "home-manager"; 33 | 34 | nix-vscode-extensions = { 35 | url = "github:nix-community/nix-vscode-extensions"; 36 | inputs.nixpkgs.follows = "nixpkgs"; 37 | }; 38 | 39 | nur.url = "github:nix-community/nur"; 40 | 41 | jovian-nixos = { 42 | url = "github:Jovian-Experiments/Jovian-NixOS"; 43 | inputs.nixpkgs.follows = "nixpkgs"; 44 | }; 45 | 46 | chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; 47 | 48 | nixarr.url = "github:rasmus-kirk/nixarr"; 49 | }; 50 | 51 | outputs = { 52 | self, 53 | nixpkgs, 54 | home-manager, 55 | nixos-hardware, 56 | plasma-manager, 57 | nix-vscode-extensions, 58 | ... 59 | } @ inputs: let 60 | inherit (self) outputs; 61 | # Supported systems for your flake packages, shell, etc. 62 | systems = [ 63 | "x86_64-linux" 64 | ]; 65 | # This is a function that generates an attribute by calling a function you 66 | # pass to it, with each system as an argument 67 | forAllSystems = nixpkgs.lib.genAttrs systems; 68 | 69 | genericModules = [ 70 | { 71 | # Enable flakes and new 'nix' command 72 | nix.settings. experimental-features = "nix-command flakes"; 73 | 74 | # This fixes things that don't use Flakes, but do want to use NixPkgs. 75 | nix.registry.nixos.flake = inputs.self; 76 | environment.etc."nix/inputs/nixpkgs".source = nixpkgs.outPath; 77 | nix.nixPath = ["nixpkgs=${nixpkgs.outPath}"]; 78 | } 79 | ]; 80 | in { 81 | # Your custom packages 82 | # Accessible through 'nix build', 'nix shell', etc 83 | packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); 84 | # Formatter for your nix files, available through 'nix fmt' 85 | # Other options beside 'alejandra' include 'nixpkgs-fmt' 86 | formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); 87 | 88 | # Your custom packages and modifications, exported as overlays 89 | overlays = import ./overlays {inherit inputs;}; 90 | # Reusable nixos modules you might want to export 91 | # These are usually stuff you would upstream into nixpkgs 92 | nixosModules = import ./modules/nixos; 93 | # Reusable home-manager modules you might want to export 94 | # These are usually stuff you would upstream into home-manager 95 | homeManagerModules = import ./modules/home-manager; 96 | 97 | # By default, NixOS will try to refer the nixosConfiguration with its hostname. 98 | # However, the configuration name can also be specified using: 99 | # sudo nixos-rebuild switch --flake /path/to/flakes/directory# 100 | # 101 | # The `nixpkgs.lib.nixosSystem` function is used to build this 102 | # configuration, the following attribute set is its parameter. 103 | # 104 | # Run the following command in the flake's directory to 105 | # deploy this configuration on any NixOS system: 106 | # sudo nixos-rebuild switch --flake .#zephyrus 107 | nixosConfigurations = { 108 | zephyrus = nixpkgs.lib.nixosSystem { 109 | system = "x86_64-linux"; 110 | 111 | # The Nix module system can modularize configuration, 112 | # improving the maintainability of configuration. 113 | # 114 | # Each parameter in the `modules` is a Nixpkgs Module, and 115 | # there is a partial introduction to it in the nixpkgs manual: 116 | # 117 | # It is said to be partial because the documentation is not 118 | # complete, only some simple introductions. 119 | # such is the current state of Nix documentation... 120 | # 121 | # A Nixpkgs Module can be an attribute set, or a function that 122 | # returns an attribute set. By default, if a Nixpkgs Module is a 123 | # function, this function have the following default parameters: 124 | # 125 | # lib: the nixpkgs function library, which provides many 126 | # useful functions for operating Nix expressions: 127 | # https://nixos.org/manual/nixpkgs/stable/#id-1.4 128 | # config: all config options of the current flake, very useful 129 | # options: all options defined in all NixOS Modules 130 | # in the current flake 131 | # pkgs: a collection of all packages defined in nixpkgs, 132 | # plus a set of functions related to packaging. 133 | # you can assume its default value is 134 | # `nixpkgs.legacyPackages."${system}"` for now. 135 | # can be customed by `nixpkgs.pkgs` option 136 | # modulesPath: the default path of nixpkgs's modules folder, 137 | # used to import some extra modules from nixpkgs. 138 | # this parameter is rarely used, 139 | # you can ignore it for now. 140 | # 141 | # The default parameters mentioned above are automatically 142 | # generated by Nixpkgs. 143 | # Pass other non-default parameters to the submodules: 144 | specialArgs = {inherit inputs outputs;}; # Set all input parameters as input key of specialArgs (ex: inputs.nixos-hardware) 145 | # specialArgs = inputs; # Set all input parameters as specialArgs of all sub-modules so that we can use them in sub-modules directly. 146 | 147 | modules = genericModules ++ [./hosts/zephyrus]; 148 | }; 149 | }; 150 | }; 151 | } 152 | -------------------------------------------------------------------------------- /apps/mpv.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: let 2 | shaders = "${pkgs.mpv-shim-default-shaders}/share/mpv-shim-default-shaders/shaders/"; 3 | # https://github.com/iwalton3/default-shader-pack/blob/b573551f021f942d6c7546391c7c994bb435ee6c/pack-next.json 4 | profiles = { 5 | fsr = { 6 | name = "AMD FidelityFX Super Resolution"; 7 | settings = { 8 | glsl-shader = "${shaders}FSR.glsl"; 9 | }; 10 | }; 11 | cas = { 12 | name = "AMD FidelityFX Contrast Adaptive Sharpening"; 13 | settings = { 14 | glsl-shader = "${shaders}CAS-scaled.glsl"; 15 | }; 16 | }; 17 | fsr-cas = { 18 | name = "AMD FidelityFX Super Resolution + Contrast Adaptive Sharpening"; 19 | settings = { 20 | glsl-shaders = [ 21 | "${shaders}FSR.glsl" 22 | ]; 23 | glsl-shaders-append = [ 24 | "${shaders}CAS-scaled.glsl" 25 | ]; 26 | }; 27 | }; 28 | generic = { 29 | name = "FSRCNNX"; 30 | settings = { 31 | dscale = "mitchell"; 32 | cscale = "mitchell"; 33 | glsl-shaders = [ 34 | "${shaders}FSRCNNX_x2_16-0-4-1.glsl" 35 | ]; 36 | glsl-shaders-append = [ 37 | "${shaders}SSimDownscaler.glsl" 38 | "${shaders}KrigBilateral.glsl" 39 | ]; 40 | }; 41 | }; 42 | generic-high = { 43 | name = "FSRCNNX x16"; 44 | settings = { 45 | dscale = "mitchell"; 46 | cscale = "mitchell"; 47 | glsl-shaders = [ 48 | "${shaders}FSRCNNX_x2_8-0-4-1.glsl" 49 | ]; 50 | glsl-shaders-append = [ 51 | "${shaders}SSimDownscaler.glsl" 52 | "${shaders}KrigBilateral.glsl" 53 | ]; 54 | }; 55 | }; 56 | nnedi-high = { 57 | name = "NNEDI3 (64 Neurons)"; 58 | settings = { 59 | dscale = "mitchell"; 60 | cscale = "mitchell"; 61 | glsl-shaders = [ 62 | "${shaders}nnedi3-nns64-win8x6.hook" 63 | ]; 64 | glsl-shaders-append = [ 65 | "${shaders}SSimDownscaler.glsl" 66 | "${shaders}KrigBilateral.glsl" 67 | ]; 68 | }; 69 | }; 70 | nnedi-very-high = { 71 | name = "NNEDI3 High (128 Neurons)"; 72 | settings = { 73 | dscale = "mitchell"; 74 | cscale = "mitchell"; 75 | glsl-shaders = [ 76 | "${shaders}nnedi3-nns128-win8x6.hook" 77 | ]; 78 | glsl-shaders-append = [ 79 | "${shaders}SSimDownscaler.glsl" 80 | "${shaders}KrigBilateral.glsl" 81 | ]; 82 | }; 83 | }; 84 | anime4k-high-a = { 85 | name = "Anime4K A (HQ) - For Very Blurry/Compressed"; 86 | settings = { 87 | glsl-shaders = [ 88 | "${shaders}Anime4K_Clamp_Highlights.glsl" 89 | ]; 90 | glsl-shaders-append = [ 91 | "${shaders}Anime4K_Restore_CNN_VL.glsl" 92 | "${shaders}Anime4K_Upscale_CNN_x2_VL.glsl" 93 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 94 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 95 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 96 | ]; 97 | }; 98 | }; 99 | anime4k-high-b = { 100 | name = "Anime4K B (HQ) - For Blurry/Ringing"; 101 | settings = { 102 | glsl-shaders = [ 103 | "${shaders}Anime4K_Clamp_Highlights.glsl" 104 | ]; 105 | glsl-shaders-append = [ 106 | "${shaders}CAS-scaled.glsl" 107 | "${shaders}Anime4K_Restore_CNN_Soft_VL.glsl" 108 | "${shaders}Anime4K_Upscale_CNN_x2_VL.glsl" 109 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 110 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 111 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 112 | ]; 113 | }; 114 | }; 115 | anime4k-high-c = { 116 | name = "Anime4K C (HQ) - For Crisp/Sharp"; 117 | settings = { 118 | glsl-shaders = [ 119 | "${shaders}Anime4K_Clamp_Highlights.glsl" 120 | ]; 121 | glsl-shaders-append = [ 122 | "${shaders}Anime4K_Upscale_Denoise_CNN_x2_VL.glsl" 123 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 124 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 125 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 126 | ]; 127 | }; 128 | }; 129 | anime4k-high-aa = { 130 | name = "Anime4K AA (HQ) - For Very Blurry/Compressed"; 131 | settings = { 132 | glsl-shaders = [ 133 | "${shaders}Anime4K_Clamp_Highlights.glsl" 134 | ]; 135 | glsl-shaders-append = [ 136 | "${shaders}CAS-scaled.glsl" 137 | "${shaders}Anime4K_Restore_CNN_VL.glsl" 138 | "${shaders}Anime4K_Upscale_CNN_x2_VL.glsl" 139 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 140 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 141 | "${shaders}Anime4K_Restore_CNN_M.glsl" 142 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 143 | ]; 144 | }; 145 | }; 146 | anime4k-high-bb = { 147 | name = "Anime4K BB (HQ) - For Blurry/Ringing"; 148 | settings = { 149 | glsl-shaders = [ 150 | "${shaders}Anime4K_Clamp_Highlights.glsl" 151 | ]; 152 | glsl-shaders-append = [ 153 | "${shaders}Anime4K_Restore_CNN_Soft_VL.glsl" 154 | "${shaders}Anime4K_Upscale_CNN_x2_VL.glsl" 155 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 156 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 157 | "${shaders}Anime4K_Restore_CNN_Soft_M.glsl" 158 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 159 | ]; 160 | }; 161 | }; 162 | anime4k-high-ca = { 163 | name = "Anime4K CA (HQ) - For Crisp/Sharp"; 164 | settings = { 165 | glsl-shaders = [ 166 | "${shaders}Anime4K_Clamp_Highlights.glsl" 167 | ]; 168 | glsl-shaders-append = [ 169 | "${shaders}Anime4K_Upscale_Denoise_CNN_x2_VL.glsl" 170 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 171 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 172 | "${shaders}Anime4K_Restore_CNN_M.glsl" 173 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 174 | ]; 175 | }; 176 | }; 177 | anime4k-fast-a = { 178 | name = "Anime4K A (Fast) - For Very Blurry/Compressed"; 179 | settings = { 180 | glsl-shaders = [ 181 | "${shaders}Anime4K_Clamp_Highlights.glsl" 182 | ]; 183 | glsl-shaders-append = [ 184 | "${shaders}Anime4K_Restore_CNN_M.glsl" 185 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 186 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 187 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 188 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 189 | ]; 190 | }; 191 | }; 192 | anime4k-fast-b = { 193 | name = "Anime4K B (Fast) - For Blurry/Ringing"; 194 | settings = { 195 | glsl-shaders = [ 196 | "${shaders}Anime4K_Clamp_Highlights.glsl" 197 | ]; 198 | glsl-shaders-append = [ 199 | "${shaders}Anime4K_Restore_CNN_Soft_M.glsl" 200 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 201 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 202 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 203 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 204 | ]; 205 | }; 206 | }; 207 | anime4k-fast-c = { 208 | name = "Anime4K C (Fast) - For Crisp/Sharp"; 209 | settings = { 210 | glsl-shaders = [ 211 | "${shaders}Anime4K_Clamp_Highlights.glsl" 212 | ]; 213 | glsl-shaders-append = [ 214 | "${shaders}Anime4K_Upscale_Denoise_CNN_x2_M.glsl" 215 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 216 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 217 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 218 | ]; 219 | }; 220 | }; 221 | anime4k-fast-aa = { 222 | name = "Anime4K AA (Fast) - For Very Blurry/Compressed"; 223 | settings = { 224 | glsl-shaders = [ 225 | "${shaders}Anime4K_Clamp_Highlights.glsl" 226 | ]; 227 | glsl-shaders-append = [ 228 | "${shaders}Anime4K_Restore_CNN_M.glsl" 229 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 230 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 231 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 232 | "${shaders}Anime4K_Restore_CNN_S.glsl" 233 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 234 | ]; 235 | }; 236 | }; 237 | anime4k-fast-bb = { 238 | name = "Anime4K BB (Fast) - For Blurry/Ringing"; 239 | settings = { 240 | glsl-shaders = [ 241 | "${shaders}Anime4K_Clamp_Highlights.glsl" 242 | ]; 243 | glsl-shaders-append = [ 244 | "${shaders}Anime4K_Restore_CNN_Soft_M.glsl" 245 | "${shaders}Anime4K_Upscale_CNN_x2_M.glsl" 246 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 247 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 248 | "${shaders}Anime4K_Restore_CNN_Soft_S.glsl" 249 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 250 | ]; 251 | }; 252 | }; 253 | anime4k-fast-cc = { 254 | name = "Anime4K CA (Fast) - For Crisp/Sharp"; 255 | settings = { 256 | glsl-shaders = [ 257 | "${shaders}Anime4K_Clamp_Highlights.glsl" 258 | ]; 259 | glsl-shaders-append = [ 260 | "${shaders}Anime4K_Upscale_Denoise_CNN_x2_M.glsl" 261 | "${shaders}Anime4K_AutoDownscalePre_x2.glsl" 262 | "${shaders}Anime4K_AutoDownscalePre_x4.glsl" 263 | "${shaders}Anime4K_Restore_CNN_S.glsl" 264 | "${shaders}Anime4K_Upscale_CNN_x2_S.glsl" 265 | ]; 266 | }; 267 | }; 268 | }; 269 | in { 270 | programs.mpv = { 271 | enable = true; 272 | # FIXME: https://github.com/NixOS/nixpkgs/pull/304349 273 | # package = pkgs.wrapMpv (pkgs.mpv-unwrapped.override {}) {youtubeSupport = true;}; 274 | scripts = with pkgs.mpvScripts; [mpris uosc thumbfast sponsorblock quality-menu]; 275 | # https://github.com/mpv-player/mpv/blob/master/DOCS/man/options.rst 276 | config = { 277 | # UI 278 | autofit = "70%"; 279 | 280 | # Video 281 | vo = "gpu-next"; 282 | gpu-api = "vulkan"; 283 | hwdec = "auto-safe"; 284 | 285 | # Audio 286 | ao = "pipewire"; 287 | alang = "jpn,jp,eng,en"; 288 | 289 | # Subtitles 290 | slang = "eng,en,bg,vi,vn"; 291 | sub-auto = "fuzzy"; 292 | 293 | # Screenshots 294 | screenshot-directory = "~/Pictures"; 295 | screenshot-template = "mpv-%f-%wH.%wM.%wS.%wT-#%#00n"; # name-hour-minute-second-millisecond-ssnumb 296 | }; 297 | scriptOpts.uosc = { 298 | # https://github.com/tomasklaen/uosc/blob/main/src/uosc.conf 299 | controls = "subtitles,chapters,audio,video,editions,stream-quality,space,menu"; 300 | }; 301 | 302 | bindings = { 303 | # https://github.com/mpv-player/mpv/blob/master/etc/input.conf 304 | "MOUSE_BTN2" = "script-binding uosc/menu-blurred"; 305 | "tab" = "script-binding uosc/toggle-ui"; 306 | "Shift+ENTER" = "script-binding uosc/download-subtitles"; 307 | }; 308 | 309 | # https://github.com/tomasklaen/uosc?tab=readme-ov-file#menu-1 310 | extraInput = '' 311 | ` script-binding console/enable #! Console 312 | 313 | g cycle interpolation #! Video > Interpolation 314 | d cycle deinterlace #! Video > Toggle Deinterlace 315 | [ add speed +0.1; script-binding uosc/flash-speed #! Video > Speed > Increase Speed 316 | ] add speed -0.1; script-binding uosc/flash-speed #! Video > Speed > Decrease Speed 317 | BS set speed 1; script-binding uosc/flash-speed #! Video > Speed > Reset Speed 318 | # set video-aspect-override "-1" #! Video > Aspect Ratio > Default 319 | # set video-aspect-override "16:9" #! Video > Aspect Ratio > 16:9 320 | # set video-aspect-override "4:3" #! Video > Aspect Ratio > 4:3 321 | # set video-aspect-override "2.35:1" #! Video > Aspect Ratio > 2.35:1 322 | # vf toggle vflip #! Video > Flip > Vertical 323 | # vf toggle hflip #! Video > Flip > Horizontal 324 | b cycle-values deband "yes" "no" #! Video > Deband > Toggle Deband 325 | # cycle-values deband-threshold "35" "45" "60\ show-text "Deband: ''${deband-iterations}:''${deband-threshold}:''${deband-range}:''${deband-grain}" 1000 #! Video > Deband > Deband (Weak) 326 | # cycle-values deband-range "20" "25" "30\ show-text "Deband: ''${deband-iterations}:''${deband-threshold}:''${deband-range}:''${deband-grain}" 1000 #! Video > Deband > Deband (Medium) 327 | # cycle-values deband-grain "5" "15" "30\ show-text "Deband: ''${deband-iterations}:''${deband-threshold}:''${deband-range}:''${deband-grain}" 1000 #! Video > Deband > Deband (Strong) 328 | 329 | # script-binding uosc/audio-device #! Audio > Devices 330 | F1 af toggle "lavfi=[loudnorm=I=-14:TP=-3:LRA=4]'"; show-text "''${af}" #! Audio > Dialogue 331 | # af clr "" #! Audio > Clear Filters 332 | # script-binding afilter/toggle-eqr #! Audio > Toggle Equalizer 333 | a cycle audio-normalize-downmix #! Audio > Toggle Normalize 334 | # script-binding afilter/toggle-dnm #! Audio > Toggle Normalizer 335 | # script-binding afilter/toggle-drc #! Audio > Toggle Compressor 336 | Ctrl++ add audio-delay +0.10 #! Audio > Delay > Increase Audio Delay 337 | Ctrl+- add audio-delay -0.10 #! Audio > Delay > Decrease Audio Delay 338 | # set audio-delay 0 #! Audio > Delay > Reset Audio Delay 339 | 340 | Shift+g add sub-scale +0.05 #! Subtitles > Scale > Increase Subtitle Scale 341 | Shift+f add sub-scale -0.05 #! Subtitles > Scale > Decrease Subtitle Scale 342 | # set sub-scale 1 #! Subtitles > Scale > Reset Subtitle Scale 343 | : add sub-pos -1 #! Subtitles > Position > Move Subtitle Up 344 | " add sub-pos +1 #! Subtitles > Position > Move Subtitle Down 345 | # set sub-pos 100 #! Subtitles > Position > Reset Subtitle Position 346 | z add sub-delay -0.1 #! Subtitles > Delay > Decrease Subtitles Delay 347 | Z add sub-delay 0.1 #! Subtitles > Delay > Increase Subtitles Delay 348 | # set sub-delay 0 #! Subtitles > Delay > Reset Subtitles Delay 349 | 350 | # script-binding sview/shader-view #! Profiles > Show Loaded Shaders 351 | CTRL+0 change-list glsl-shaders clr all; show-text "Shaders cleared" #! Profiles > Clear All Shaders 352 | # #! Profiles > --- 353 | # apply-profile fsr; show-text "Profile: ${profiles.fsr.name}" #! Profiles > ${profiles.fsr.name} 354 | # apply-profile cas; show-text "Profile: ${profiles.cas.name}" #! Profiles > ${profiles.cas.name} 355 | CTRL+1 apply-profile fsr-cas; show-text "Profile: ${profiles.fsr-cas.name}" #! Profiles > ${profiles.fsr-cas.name} 356 | # apply-profile genreric #! Profiles > ${profiles.generic.name} 357 | CTRL+2 apply-profile generic-high; show-text "Profile: ${profiles.generic-high.name}" #! Profiles > ${profiles.generic-high.name} 358 | # apply-profile nnedi-high; show-text "Profile: ${profiles.nnedi-high.name}" #! Profiles > ${profiles.nnedi-high.name} 359 | CTRL+3 apply-profile nnedi-very-high; show-text "Profile: ${profiles.nnedi-very-high.name}" #! Profiles > ${profiles.nnedi-very-high.name} 360 | CTRL+4 apply-profile anime4k-high-a; show-text "Profile: ${profiles.anime4k-high-a.name}" #! Profiles > ${profiles.anime4k-high-a.name} 361 | CTRL+5 apply-profile anime4k-high-b; show-text "Profile: ${profiles.anime4k-high-b.name}" #! Profiles > ${profiles.anime4k-high-b.name} 362 | CTRL+6 apply-profile anime4k-high-c; show-text "Profile: ${profiles.anime4k-high-c.name}" #! Profiles > ${profiles.anime4k-high-c.name} 363 | CTRL+7 apply-profile anime4k-high-aa; show-text "Profile: ${profiles.anime4k-high-aa.name}" #! Profiles > ${profiles.anime4k-high-aa.name} 364 | CTRL+8 apply-profile anime4k-high-bb; show-text "Profile: ${profiles.anime4k-high-bb.name}" #! Profiles > ${profiles.anime4k-high-bb.name} 365 | CTRL+9 apply-profile anime4k-high-ca; show-text "Profile: ${profiles.anime4k-high-ca.name}" #! Profiles > ${profiles.anime4k-high-ca.name} 366 | # apply-profile anime4k-fast-a; show-text "Profile: ${profiles.anime4k-fast-a.name}" #! Profiles > ${profiles.anime4k-fast-a.name} 367 | # apply-profile anime4k-fast-b; show-text "Profile: ${profiles.anime4k-fast-b.name}" #! Profiles > ${profiles.anime4k-fast-b.name} 368 | # apply-profile anime4k-fast-c; show-text "Profile: ${profiles.anime4k-fast-c.name}" #! Profiles > ${profiles.anime4k-fast-c.name} 369 | # apply-profile anime4k-fast-aa; show-text "Profile: ${profiles.anime4k-fast-aa.name}" #! Profiles > ${profiles.anime4k-fast-aa.name} 370 | # apply-profile anime4k-fast-bb; show-text "Profile: ${profiles.anime4k-fast-bb.name}" #! Profiles > ${profiles.anime4k-fast-bb.name} 371 | # apply-profile anime4k-fast-cc; show-text "Profile: ${profiles.anime4k-fast-cc.name}" #! Profiles > ${profiles.anime4k-fast-cc.name} 372 | ''; 373 | 374 | defaultProfiles = ["high-quality"]; # https://github.com/mpv-player/mpv/blob/master/etc/builtin.conf 375 | 376 | profiles = { 377 | fsr = profiles.fsr.settings; 378 | cas = profiles.cas.settings; 379 | fsr-cas = profiles.fsr-cas.settings; 380 | anime4k-high-a = profiles.anime4k-high-a.settings; 381 | anime4k-high-b = profiles.anime4k-high-b.settings; 382 | anime4k-high-c = profiles.anime4k-high-c.settings; 383 | anime4k-high-aa = profiles.anime4k-high-aa.settings; 384 | anime4k-high-bb = profiles.anime4k-high-bb.settings; 385 | anime4k-high-ca = profiles.anime4k-high-ca.settings; 386 | anime4k-fast-a = profiles.anime4k-fast-a.settings; 387 | anime4k-fast-b = profiles.anime4k-fast-b.settings; 388 | anime4k-fast-c = profiles.anime4k-fast-c.settings; 389 | anime4k-fast-aa = profiles.anime4k-fast-aa.settings; 390 | anime4k-fast-bb = profiles.anime4k-fast-bb.settings; 391 | anime4k-fast-cc = profiles.anime4k-fast-cc.settings; 392 | genreric = profiles.generic.settings; 393 | generic-high = profiles.generic-high.settings; 394 | nnedi-high = profiles.nnedi-high.settings; 395 | nnedi-very-high = profiles.nnedi-very-high.settings; 396 | }; 397 | }; 398 | } 399 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "chaotic": { 4 | "inputs": { 5 | "compare-to": "compare-to", 6 | "flake-schemas": "flake-schemas", 7 | "home-manager": "home-manager", 8 | "jovian": "jovian", 9 | "nixpkgs": "nixpkgs", 10 | "systems": "systems", 11 | "yafas": "yafas" 12 | }, 13 | "locked": { 14 | "lastModified": 1719190811, 15 | "narHash": "sha256-gm7+x9bu04JlmAvMh4BZeaaWn5/G7/I+HS1lqxKjeao=", 16 | "owner": "chaotic-cx", 17 | "repo": "nyx", 18 | "rev": "04ae5874ff0782f4ef0dfd52f8c0bc009de0f33a", 19 | "type": "github" 20 | }, 21 | "original": { 22 | "owner": "chaotic-cx", 23 | "ref": "nyxpkgs-unstable", 24 | "repo": "nyx", 25 | "type": "github" 26 | } 27 | }, 28 | "compare-to": { 29 | "locked": { 30 | "lastModified": 1695341185, 31 | "narHash": "sha256-htO6DSbWyCgaDkxi7foPjXwJFPzGjVt3RRUbPSpNtZY=", 32 | "rev": "98b8e330823a3570d328720f87a1153f8a7f2224", 33 | "revCount": 2, 34 | "type": "tarball", 35 | "url": "https://api.flakehub.com/f/pinned/chaotic-cx/nix-empty-flake/0.1.2%2Brev-98b8e330823a3570d328720f87a1153f8a7f2224/018aba35-d228-7fa9-b205-7616c89ef4e0/source.tar.gz" 36 | }, 37 | "original": { 38 | "type": "tarball", 39 | "url": "https://flakehub.com/f/chaotic-cx/nix-empty-flake/%3D0.1.2.tar.gz" 40 | } 41 | }, 42 | "devshell": { 43 | "inputs": { 44 | "flake-utils": "flake-utils_2", 45 | "nixpkgs": [ 46 | "nixarr", 47 | "nixpkgs" 48 | ] 49 | }, 50 | "locked": { 51 | "lastModified": 1713532798, 52 | "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", 53 | "owner": "numtide", 54 | "repo": "devshell", 55 | "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", 56 | "type": "github" 57 | }, 58 | "original": { 59 | "owner": "numtide", 60 | "repo": "devshell", 61 | "type": "github" 62 | } 63 | }, 64 | "flake-compat": { 65 | "flake": false, 66 | "locked": { 67 | "lastModified": 1696426674, 68 | "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 69 | "owner": "edolstra", 70 | "repo": "flake-compat", 71 | "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 72 | "type": "github" 73 | }, 74 | "original": { 75 | "owner": "edolstra", 76 | "repo": "flake-compat", 77 | "type": "github" 78 | } 79 | }, 80 | "flake-parts": { 81 | "inputs": { 82 | "nixpkgs-lib": [ 83 | "nixarr", 84 | "nixpkgs" 85 | ] 86 | }, 87 | "locked": { 88 | "lastModified": 1712014858, 89 | "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", 90 | "owner": "hercules-ci", 91 | "repo": "flake-parts", 92 | "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", 93 | "type": "github" 94 | }, 95 | "original": { 96 | "owner": "hercules-ci", 97 | "repo": "flake-parts", 98 | "type": "github" 99 | } 100 | }, 101 | "flake-root": { 102 | "locked": { 103 | "lastModified": 1713493429, 104 | "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=", 105 | "owner": "srid", 106 | "repo": "flake-root", 107 | "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd", 108 | "type": "github" 109 | }, 110 | "original": { 111 | "owner": "srid", 112 | "repo": "flake-root", 113 | "type": "github" 114 | } 115 | }, 116 | "flake-schemas": { 117 | "locked": { 118 | "lastModified": 1693491534, 119 | "narHash": "sha256-ifw8Td8kD08J8DxFbYjeIx5naHcDLz7s2IFP3X42I/U=", 120 | "rev": "c702cbb663d6d70bbb716584a2ee3aeb35017279", 121 | "revCount": 21, 122 | "type": "tarball", 123 | "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.1/018a4c59-80e1-708a-bb4d-854930c20f72/source.tar.gz" 124 | }, 125 | "original": { 126 | "type": "tarball", 127 | "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.1.tar.gz" 128 | } 129 | }, 130 | "flake-utils": { 131 | "inputs": { 132 | "systems": "systems_2" 133 | }, 134 | "locked": { 135 | "lastModified": 1710146030, 136 | "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", 137 | "owner": "numtide", 138 | "repo": "flake-utils", 139 | "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", 140 | "type": "github" 141 | }, 142 | "original": { 143 | "owner": "numtide", 144 | "repo": "flake-utils", 145 | "type": "github" 146 | } 147 | }, 148 | "flake-utils_2": { 149 | "inputs": { 150 | "systems": "systems_3" 151 | }, 152 | "locked": { 153 | "lastModified": 1701680307, 154 | "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", 155 | "owner": "numtide", 156 | "repo": "flake-utils", 157 | "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", 158 | "type": "github" 159 | }, 160 | "original": { 161 | "owner": "numtide", 162 | "repo": "flake-utils", 163 | "type": "github" 164 | } 165 | }, 166 | "home-manager": { 167 | "inputs": { 168 | "nixpkgs": [ 169 | "chaotic", 170 | "nixpkgs" 171 | ] 172 | }, 173 | "locked": { 174 | "lastModified": 1719037157, 175 | "narHash": "sha256-aOKd8+mhBsLQChCu1mn/W5ww79ta5cXVE59aJFrifM8=", 176 | "owner": "nix-community", 177 | "repo": "home-manager", 178 | "rev": "cd886711998fe5d9ff7979fdd4b4cbd17b1f1511", 179 | "type": "github" 180 | }, 181 | "original": { 182 | "owner": "nix-community", 183 | "repo": "home-manager", 184 | "type": "github" 185 | } 186 | }, 187 | "home-manager_2": { 188 | "inputs": { 189 | "nixpkgs": [ 190 | "nixpkgs" 191 | ] 192 | }, 193 | "locked": { 194 | "lastModified": 1719180626, 195 | "narHash": "sha256-vZAzm5KQpR6RGple1dzmSJw5kPivES2heCFM+ZWkt0I=", 196 | "owner": "nix-community", 197 | "repo": "home-manager", 198 | "rev": "6b1f90a8ff92e81638ae6eb48cd62349c3e387bb", 199 | "type": "github" 200 | }, 201 | "original": { 202 | "owner": "nix-community", 203 | "repo": "home-manager", 204 | "type": "github" 205 | } 206 | }, 207 | "jovian": { 208 | "inputs": { 209 | "nix-github-actions": "nix-github-actions", 210 | "nixpkgs": [ 211 | "chaotic", 212 | "nixpkgs" 213 | ] 214 | }, 215 | "locked": { 216 | "lastModified": 1719032789, 217 | "narHash": "sha256-MIPobSKR53T0Yrb8wu2fbjSVokhJeJy5AF6B1Hzckso=", 218 | "owner": "Jovian-Experiments", 219 | "repo": "Jovian-NixOS", 220 | "rev": "495a672a2024bdc0e86af95f4e338827f9bfb865", 221 | "type": "github" 222 | }, 223 | "original": { 224 | "owner": "Jovian-Experiments", 225 | "repo": "Jovian-NixOS", 226 | "type": "github" 227 | } 228 | }, 229 | "jovian-nixos": { 230 | "inputs": { 231 | "nix-github-actions": "nix-github-actions_2", 232 | "nixpkgs": [ 233 | "nixpkgs" 234 | ] 235 | }, 236 | "locked": { 237 | "lastModified": 1719032789, 238 | "narHash": "sha256-MIPobSKR53T0Yrb8wu2fbjSVokhJeJy5AF6B1Hzckso=", 239 | "owner": "Jovian-Experiments", 240 | "repo": "Jovian-NixOS", 241 | "rev": "495a672a2024bdc0e86af95f4e338827f9bfb865", 242 | "type": "github" 243 | }, 244 | "original": { 245 | "owner": "Jovian-Experiments", 246 | "repo": "Jovian-NixOS", 247 | "type": "github" 248 | } 249 | }, 250 | "nix-github-actions": { 251 | "inputs": { 252 | "nixpkgs": [ 253 | "chaotic", 254 | "jovian", 255 | "nixpkgs" 256 | ] 257 | }, 258 | "locked": { 259 | "lastModified": 1690328911, 260 | "narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=", 261 | "owner": "zhaofengli", 262 | "repo": "nix-github-actions", 263 | "rev": "96df4a39c52f53cb7098b923224d8ce941b64747", 264 | "type": "github" 265 | }, 266 | "original": { 267 | "owner": "zhaofengli", 268 | "ref": "matrix-name", 269 | "repo": "nix-github-actions", 270 | "type": "github" 271 | } 272 | }, 273 | "nix-github-actions_2": { 274 | "inputs": { 275 | "nixpkgs": [ 276 | "jovian-nixos", 277 | "nixpkgs" 278 | ] 279 | }, 280 | "locked": { 281 | "lastModified": 1690328911, 282 | "narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=", 283 | "owner": "zhaofengli", 284 | "repo": "nix-github-actions", 285 | "rev": "96df4a39c52f53cb7098b923224d8ce941b64747", 286 | "type": "github" 287 | }, 288 | "original": { 289 | "owner": "zhaofengli", 290 | "ref": "matrix-name", 291 | "repo": "nix-github-actions", 292 | "type": "github" 293 | } 294 | }, 295 | "nix-vscode-extensions": { 296 | "inputs": { 297 | "flake-compat": "flake-compat", 298 | "flake-utils": "flake-utils", 299 | "nixpkgs": [ 300 | "nixpkgs" 301 | ] 302 | }, 303 | "locked": { 304 | "lastModified": 1719192512, 305 | "narHash": "sha256-sRjsPzJCPPbbRa4scCq9jFeLH/koVSGyNzCScyy2dZw=", 306 | "owner": "nix-community", 307 | "repo": "nix-vscode-extensions", 308 | "rev": "8b29896b948d4a9ed23f93275f1208b519641c5c", 309 | "type": "github" 310 | }, 311 | "original": { 312 | "owner": "nix-community", 313 | "repo": "nix-vscode-extensions", 314 | "type": "github" 315 | } 316 | }, 317 | "nixarr": { 318 | "inputs": { 319 | "devshell": "devshell", 320 | "flake-parts": "flake-parts", 321 | "flake-root": "flake-root", 322 | "nixpkgs": "nixpkgs_2", 323 | "treefmt-nix": "treefmt-nix", 324 | "vpnconfinement": "vpnconfinement" 325 | }, 326 | "locked": { 327 | "lastModified": 1715249591, 328 | "narHash": "sha256-gH0Bx8MGRXhVkpnUeEMf/yg18CnbvozNMOn3xAkQnzg=", 329 | "owner": "rasmus-kirk", 330 | "repo": "nixarr", 331 | "rev": "fd8d42475e9b95f1de1a179431633d028233fa99", 332 | "type": "github" 333 | }, 334 | "original": { 335 | "owner": "rasmus-kirk", 336 | "repo": "nixarr", 337 | "type": "github" 338 | } 339 | }, 340 | "nixos-hardware": { 341 | "locked": { 342 | "lastModified": 1719145664, 343 | "narHash": "sha256-+0bBlerLxsHUJcKPDWZM1wL3V9bzCFjz+VyRTG8fnUA=", 344 | "owner": "NixOS", 345 | "repo": "nixos-hardware", 346 | "rev": "c3e48cbd88414f583ff08804eb57b0da4c194f9e", 347 | "type": "github" 348 | }, 349 | "original": { 350 | "owner": "NixOS", 351 | "ref": "master", 352 | "repo": "nixos-hardware", 353 | "type": "github" 354 | } 355 | }, 356 | "nixpkgs": { 357 | "locked": { 358 | "lastModified": 1719075281, 359 | "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", 360 | "owner": "NixOS", 361 | "repo": "nixpkgs", 362 | "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", 363 | "type": "github" 364 | }, 365 | "original": { 366 | "owner": "NixOS", 367 | "ref": "nixos-unstable", 368 | "repo": "nixpkgs", 369 | "type": "github" 370 | } 371 | }, 372 | "nixpkgs-master": { 373 | "locked": { 374 | "lastModified": 1719201928, 375 | "narHash": "sha256-Z/8wMf3adTyiY0HQQxO7dch5ZQXbgeHJBVZHTgzA/IM=", 376 | "owner": "NixOS", 377 | "repo": "nixpkgs", 378 | "rev": "2ee53d800ad85bb7465b02fce59d45fa2eeacb74", 379 | "type": "github" 380 | }, 381 | "original": { 382 | "owner": "NixOS", 383 | "ref": "master", 384 | "repo": "nixpkgs", 385 | "type": "github" 386 | } 387 | }, 388 | "nixpkgs-stable": { 389 | "locked": { 390 | "lastModified": 1718811006, 391 | "narHash": "sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90++qRN3lukGaIk=", 392 | "owner": "NixOS", 393 | "repo": "nixpkgs", 394 | "rev": "03d771e513ce90147b65fe922d87d3a0356fc125", 395 | "type": "github" 396 | }, 397 | "original": { 398 | "owner": "NixOS", 399 | "ref": "nixos-23.11", 400 | "repo": "nixpkgs", 401 | "type": "github" 402 | } 403 | }, 404 | "nixpkgs_2": { 405 | "locked": { 406 | "lastModified": 1713562564, 407 | "narHash": "sha256-NQpYhgoy0M89g9whRixSwsHb8RFIbwlxeYiVSDwSXJg=", 408 | "owner": "nixos", 409 | "repo": "nixpkgs", 410 | "rev": "92d295f588631b0db2da509f381b4fb1e74173c5", 411 | "type": "github" 412 | }, 413 | "original": { 414 | "owner": "nixos", 415 | "ref": "nixpkgs-unstable", 416 | "repo": "nixpkgs", 417 | "type": "github" 418 | } 419 | }, 420 | "nixpkgs_3": { 421 | "locked": { 422 | "lastModified": 1719075281, 423 | "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", 424 | "owner": "NixOS", 425 | "repo": "nixpkgs", 426 | "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", 427 | "type": "github" 428 | }, 429 | "original": { 430 | "owner": "NixOS", 431 | "ref": "nixos-unstable", 432 | "repo": "nixpkgs", 433 | "type": "github" 434 | } 435 | }, 436 | "nur": { 437 | "locked": { 438 | "lastModified": 1719201853, 439 | "narHash": "sha256-31+QBq8nwXJF+ex93dkDyWwjH/lUe+20u3P5WB2hmvo=", 440 | "owner": "nix-community", 441 | "repo": "nur", 442 | "rev": "d6538b2ac6e73890e37b763a9cded1b125aa086a", 443 | "type": "github" 444 | }, 445 | "original": { 446 | "owner": "nix-community", 447 | "repo": "nur", 448 | "type": "github" 449 | } 450 | }, 451 | "plasma-manager": { 452 | "inputs": { 453 | "home-manager": [ 454 | "home-manager" 455 | ], 456 | "nixpkgs": [ 457 | "nixpkgs" 458 | ] 459 | }, 460 | "locked": { 461 | "lastModified": 1719145147, 462 | "narHash": "sha256-Es/sgvSvVzv3DfWcl3OMABIuBUWiYXx2uwT94hQO4Io=", 463 | "owner": "pjones", 464 | "repo": "plasma-manager", 465 | "rev": "5db39ce2fa95f4dfe1bdfe371fd9a90c65b3a9a0", 466 | "type": "github" 467 | }, 468 | "original": { 469 | "owner": "pjones", 470 | "repo": "plasma-manager", 471 | "type": "github" 472 | } 473 | }, 474 | "root": { 475 | "inputs": { 476 | "chaotic": "chaotic", 477 | "home-manager": "home-manager_2", 478 | "jovian-nixos": "jovian-nixos", 479 | "nix-vscode-extensions": "nix-vscode-extensions", 480 | "nixarr": "nixarr", 481 | "nixos-hardware": "nixos-hardware", 482 | "nixpkgs": "nixpkgs_3", 483 | "nixpkgs-master": "nixpkgs-master", 484 | "nixpkgs-stable": "nixpkgs-stable", 485 | "nur": "nur", 486 | "plasma-manager": "plasma-manager" 487 | } 488 | }, 489 | "systems": { 490 | "locked": { 491 | "lastModified": 1689347949, 492 | "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", 493 | "owner": "nix-systems", 494 | "repo": "default-linux", 495 | "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", 496 | "type": "github" 497 | }, 498 | "original": { 499 | "owner": "nix-systems", 500 | "repo": "default-linux", 501 | "type": "github" 502 | } 503 | }, 504 | "systems_2": { 505 | "locked": { 506 | "lastModified": 1681028828, 507 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 508 | "owner": "nix-systems", 509 | "repo": "default", 510 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 511 | "type": "github" 512 | }, 513 | "original": { 514 | "owner": "nix-systems", 515 | "repo": "default", 516 | "type": "github" 517 | } 518 | }, 519 | "systems_3": { 520 | "locked": { 521 | "lastModified": 1681028828, 522 | "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 523 | "owner": "nix-systems", 524 | "repo": "default", 525 | "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 526 | "type": "github" 527 | }, 528 | "original": { 529 | "owner": "nix-systems", 530 | "repo": "default", 531 | "type": "github" 532 | } 533 | }, 534 | "treefmt-nix": { 535 | "inputs": { 536 | "nixpkgs": [ 537 | "nixarr", 538 | "nixpkgs" 539 | ] 540 | }, 541 | "locked": { 542 | "lastModified": 1711963903, 543 | "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", 544 | "owner": "numtide", 545 | "repo": "treefmt-nix", 546 | "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", 547 | "type": "github" 548 | }, 549 | "original": { 550 | "owner": "numtide", 551 | "repo": "treefmt-nix", 552 | "type": "github" 553 | } 554 | }, 555 | "vpnconfinement": { 556 | "inputs": { 557 | "nixpkgs": [ 558 | "nixarr", 559 | "nixpkgs" 560 | ] 561 | }, 562 | "locked": { 563 | "lastModified": 1711570356, 564 | "narHash": "sha256-SiOKmuE+ezmmZlIbjwtl9BPtT0M/T1X0f/mQwynZRTE=", 565 | "owner": "Maroka-chan", 566 | "repo": "VPN-Confinement", 567 | "rev": "7f35705087b742e22f3fb07704c04c4818fff2c7", 568 | "type": "github" 569 | }, 570 | "original": { 571 | "owner": "Maroka-chan", 572 | "repo": "VPN-Confinement", 573 | "type": "github" 574 | } 575 | }, 576 | "yafas": { 577 | "inputs": { 578 | "flake-schemas": [ 579 | "chaotic", 580 | "flake-schemas" 581 | ], 582 | "systems": [ 583 | "chaotic", 584 | "systems" 585 | ] 586 | }, 587 | "locked": { 588 | "lastModified": 1695926485, 589 | "narHash": "sha256-wNFFnItckgSs8XeYhhv8vlJs2WF09fSQaWgw4xkDqHQ=", 590 | "owner": "UbiqueLambda", 591 | "repo": "yafas", 592 | "rev": "7772afd6686458ca0ddbc599a52cf5d337367653", 593 | "type": "github" 594 | }, 595 | "original": { 596 | "owner": "UbiqueLambda", 597 | "repo": "yafas", 598 | "type": "github" 599 | } 600 | } 601 | }, 602 | "root": "root", 603 | "version": 7 604 | } 605 | --------------------------------------------------------------------------------