diff --git a/flake.lock b/flake.lock index b2e93db..d79103b 100644 --- a/flake.lock +++ b/flake.lock @@ -70,11 +70,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1736899990, - "narHash": "sha256-S79Hqn2EtSxU4kp99t8tRschSifWD4p/51++0xNWUxw=", + "lastModified": 1739223196, + "narHash": "sha256-vAxN2f3rvl5q62gQQjZGVSvF93nAsOxntuFz+e/655w=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "91ca1f82d717b02ceb03a3f423cbe8082ebbb26d", + "rev": "a89108e6272426f4eddd93ba17d0ea101c34fb21", "type": "github" }, "original": { @@ -84,7 +84,6 @@ } }, "flake-compat": { - "flake": false, "locked": { "lastModified": 1733328505, "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", @@ -103,6 +102,24 @@ "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, + "locked": { + "lastModified": 1741352980, + "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, "locked": { "lastModified": 1738453229, "narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=", @@ -117,9 +134,13 @@ "type": "github" } }, - "flake-parts_2": { + "flake-parts_3": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_2" + "nixpkgs-lib": [ + "stylix", + "nur", + "nixpkgs" + ] }, "locked": { "lastModified": 1733312601, @@ -203,11 +224,11 @@ ] }, "locked": { - "lastModified": 1735882644, - "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", + "lastModified": 1737465171, + "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", + "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", "type": "github" }, "original": { @@ -262,11 +283,11 @@ ] }, "locked": { - "lastModified": 1739470101, - "narHash": "sha256-NxNe32VB4XI/xIXrsKmIfrcgtEx5r/5s52pL3CpEcA4=", + "lastModified": 1741526102, + "narHash": "sha256-w1VBhX21NgK82Dbafd35AjSfOXgLAxZDotWlwO5PS+c=", "owner": "nix-community", "repo": "home-manager", - "rev": "5031c6d2978109336637977c165f82aa49fa16a7", + "rev": "07f505f91e0c7112550845425222f41865c4260a", "type": "github" }, "original": { @@ -284,11 +305,11 @@ ] }, "locked": { - "lastModified": 1737630279, - "narHash": "sha256-wJQCxyMRc4P26zDrHmZiRD5bbfcJpqPG3e2djdGG3pk=", + "lastModified": 1740347597, + "narHash": "sha256-st5q9egkPGz8TUcVVlIQX7y6G3AzHob+6M963bwVq74=", "owner": "nix-community", "repo": "home-manager", - "rev": "0db5c8bfcce78583ebbde0b2abbc95ad93445f7c", + "rev": "12e26a74e5eb1a31e13daaa08858689e25ebd449", "type": "github" }, "original": { @@ -299,11 +320,11 @@ }, "mnw": { "locked": { - "lastModified": 1735150973, - "narHash": "sha256-OJhcCAoaMMXeD6o4qI/hxBCNELJp4dN8D5LJZc8w8XA=", + "lastModified": 1738852285, + "narHash": "sha256-8Y1uyE6gGHxdU0Vcx2CMg/dAmDSxJw19aAl3TKbbo54=", "owner": "Gerg-L", "repo": "mnw", - "rev": "40cd0b006cc48dffd0f8698ad7f54cf1d56779a6", + "rev": "6ae73dc9cb72cea17bcc2e3d4670825f483e80e8", "type": "github" }, "original": { @@ -340,11 +361,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1739478914, - "narHash": "sha256-qljqSeAWOFbd6HNg8Ey28RdZYdVN8bMb6HJK7uqCKZ0=", + "lastModified": 1741516043, + "narHash": "sha256-Hv0S630U4GVZBM1Q+NCEwyN5ct7cic+8r6qLIaUaVqI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6f9b8ea84c04411c48ab5aab4620ab204936d9fc", + "rev": "8adda98a4e637d0d8a867f19ace5ed6680ecc94a", "type": "github" }, "original": { @@ -355,6 +376,21 @@ } }, "nixpkgs-lib": { + "locked": { + "lastModified": 1740877520, + "narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "147dee35aab2193b174e4c0868bd80ead5ce755c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_2": { "locked": { "lastModified": 1738452942, "narHash": "sha256-vJzFZGaCpnmo7I6i416HaBLpC+hvcURh/BQwROcGIp8=", @@ -366,25 +402,13 @@ "url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz" } }, - "nixpkgs-lib_2": { - "locked": { - "lastModified": 1733096140, - "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1736798957, - "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", + "lastModified": 1740367490, + "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3", + "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05", "type": "github" }, "original": { @@ -410,6 +434,29 @@ "type": "sourcehut" } }, + "nur": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "stylix", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1740408283, + "narHash": "sha256-2xECnhgF3MU9YjmvOkrRp8wRFo2OjjewgCtlfckhL5s=", + "owner": "nix-community", + "repo": "NUR", + "rev": "496a4a11162bdffb9a7b258942de138873f019f7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, "nvf": { "inputs": { "flake-parts": "flake-parts_2", @@ -423,11 +470,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1740070226, - "narHash": "sha256-+NtuaiNf3YNTDeMTHW6MVK86Bdkgh1vveWojDC/dRaM=", + "lastModified": 1741477095, + "narHash": "sha256-aiaCmDReL34ViSB7ArVq8vB2VdTDVft1+vKfWkWeyUo=", "owner": "notashelf", "repo": "nvf", - "rev": "54476b5a8bea713eb0480b4f3a66478cc15ef813", + "rev": "6576509cd559aec3da271d12fa911d04d44708ec", "type": "github" }, "original": { @@ -480,6 +527,7 @@ "gnome-shell": "gnome-shell", "home-manager": "home-manager", "nixpkgs": "nixpkgs_2", + "nur": "nur", "systems": "systems_3", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", @@ -488,11 +536,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1739375014, - "narHash": "sha256-0fNbvZ1Dod4rDIfwGnC7CzJ3wRFSF1v5AvNCmNkVgXo=", + "lastModified": 1741392477, + "narHash": "sha256-6ySHuduGhlZBv1uxEOlOeHWDEkKuLQ/O63DI+ZRfAmg=", "owner": "danth", "repo": "stylix", - "rev": "e86de61bb8f5f2b6459d0be3e3291ad16db4b777", + "rev": "6eea250b10386be0fc23496d1039d76b3147680e", "type": "github" }, "original": { @@ -583,11 +631,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1737565458, - "narHash": "sha256-y+9cvOA6BLKT0WfebDsyUpUa/YxKow9hTjBp6HpQv68=", + "lastModified": 1740351358, + "narHash": "sha256-Hdk850xgAd3DL8KX0AbyU7tC834d3Lej1jOo3duWiOA=", "owner": "tinted-theming", "repo": "schemes", - "rev": "ae31625ba47aeaa4bf6a98cf11a8d4886f9463d9", + "rev": "a1bc2bd89e693e7e3f5764cfe8114e2ae150e184", "type": "github" }, "original": { @@ -599,11 +647,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1735737224, - "narHash": "sha256-FO2hRBkZsjlIRqzNHCPc/52yxg11kHGA8MEtSun9RwE=", + "lastModified": 1740272597, + "narHash": "sha256-/etfUV3HzAaLW3RSJVwUaW8ULbMn3v6wbTlXSKbcoWQ=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "aead506a9930c717ebf81cc83a2126e9ca08fa64", + "rev": "b6c7f46c8718cc484f2db8b485b06e2a98304cd0", "type": "github" }, "original": { @@ -627,6 +675,28 @@ "repo": "base16-zed", "type": "github" } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "stylix", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } } }, "root": "root", diff --git a/home/programs/default.nix b/home/programs/default.nix index 7152742..fd8bc52 100644 --- a/home/programs/default.nix +++ b/home/programs/default.nix @@ -1,6 +1,8 @@ { imports = [ ./firefox.nix + ./games.nix + ./mpv.nix ./neovim.nix ./other.nix ]; diff --git a/home/programs/firefox.nix b/home/programs/firefox.nix index f2c5ce0..20cc63c 100644 --- a/home/programs/firefox.nix +++ b/home/programs/firefox.nix @@ -1,6 +1,11 @@ -{pkgs, ...}: { +{ + osConfig, + pkgs, + lib, + ... +}: { programs.firefox = { - enable = true; + enable = osConfig.niksos.desktop; package = pkgs.wrapFirefox pkgs.firefox-unwrapped { extraPolicies = { DisableFirefoxStudies = true; @@ -49,6 +54,7 @@ "jid1-QoFqdK4qzUfGWQ@jetpack".install_url = "https://addons.mozilla.org/firefox/downloads/latest/dark-background-light-text/latest.xpi"; # Dark reader alternative # "{34daeb50-c2d2-4f14-886a-7160b24d66a4}".install_url = "https://addons.mozilla.org/firefox/downloads/latest/youtube-shorts-block/latest.xpi"; # Youtube short blocker "vimium-c@gdh1995.cn".install_url = "https://addons.mozilla.org/firefox/downloads/latest/vimium-c/latest.xpi"; # Extension info here. + "ff2mpv@yossarian.net".install_url = "https://addons.mozilla.org/firefox/downloads/latest/ff2mpv/latest.xpi"; }; }; }; @@ -73,8 +79,16 @@ "gfx.webrender.all" = true; "media.ffmpeg.vaapi.enabled" = true; - "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["ublock0_raymondhill_net-browser-action","queryamoid_kaply_com-browser-action","_34daeb50-c2d2-4f14-886a-7160b24d66a4_-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","customizableui-special-spring1","vertical-spacer","urlbar-container","customizableui-special-spring2","save-to-pocket-button","downloads-button","fxa-toolbar-menu-button","unified-extensions-button","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","jid1-qofqdk4qzufgwq_jetpack-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["firefox-view-button","tabbrowser-tabs","new-tab-button","alltabs-button"],"vertical-tabs":[],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","jid1-qofqdk4qzufgwq_jetpack-browser-action","ublock0_raymondhill_net-browser-action","queryamoid_kaply_com-browser-action","_34daeb50-c2d2-4f14-886a-7160b24d66a4_-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"],"dirtyAreaCache":["nav-bar","vertical-tabs","PersonalToolbar","toolbar-menubar","TabsToolbar","unified-extensions-area"],"currentVersion":21,"newElementCount":2}''; + "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["ublock0_raymondhill_net-browser-action","queryamoid_kaply_com-browser-action","_34daeb50-c2d2-4f14-886a-7160b24d66a4_-browser-action","firefox_tampermonkey_net-browser-action","vimium-c_gdh1995_cn-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","customizableui-special-spring1","vertical-spacer","urlbar-container","customizableui-special-spring2","save-to-pocket-button","downloads-button","fxa-toolbar-menu-button","unified-extensions-button","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","jid1-qofqdk4qzufgwq_jetpack-browser-action","ff2mpv_yossarian_net-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["firefox-view-button","tabbrowser-tabs","new-tab-button","alltabs-button"],"vertical-tabs":[],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","jid1-qofqdk4qzufgwq_jetpack-browser-action","ublock0_raymondhill_net-browser-action","queryamoid_kaply_com-browser-action","_34daeb50-c2d2-4f14-886a-7160b24d66a4_-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","ff2mpv_yossarian_net-browser-action","firefox_tampermonkey_net-browser-action","vimium-c_gdh1995_cn-browser-action"],"dirtyAreaCache":["nav-bar","vertical-tabs","PersonalToolbar","toolbar-menubar","TabsToolbar","unified-extensions-area"],"currentVersion":21,"newElementCount":2}''; }; }; }; + + home.file.".mozilla/native-messaging-hosts/ff2mpv.json".text = builtins.toJSON { + name = "ff2mpv"; + description = "ff2mpv's external manifest"; + path = lib.getExe pkgs.ff2mpv-rust; + type = "stdio"; + allowed_extensions = ["ff2mpv@yossarian.net"]; + }; } diff --git a/home/programs/games.nix b/home/programs/games.nix new file mode 100644 index 0000000..75c47ef --- /dev/null +++ b/home/programs/games.nix @@ -0,0 +1,3 @@ +{pkgs, ...}: { + # Also look at system/programs/games.nix +} diff --git a/home/programs/mpv.nix b/home/programs/mpv.nix new file mode 100644 index 0000000..b28aa10 --- /dev/null +++ b/home/programs/mpv.nix @@ -0,0 +1,27 @@ +{ + pkgs, + osConfig, + ... +}: { + programs.mpv = { + enable = osConfig.niksos.desktop; + config = { + vo = "gpu"; + profile = "gpu-hq"; + hwdec = "auto-safe"; + gpu-context = "wayland"; + ytdl-format = "bestvideo+bestaudio"; + volume-max = 200; + fs = true; + save-position-on-quit = true; + }; + + scripts = with pkgs.mpvScripts; [ + uosc + youtube-upnext + thumbfast + sponsorblock + mpv-cheatsheet + ]; + }; +} diff --git a/home/programs/neovim.nix b/home/programs/neovim.nix index 298416a..18182b9 100644 --- a/home/programs/neovim.nix +++ b/home/programs/neovim.nix @@ -1,8 +1,12 @@ -{inputs, ...}: { +{ + inputs, + osConfig, + ... +}: { imports = [inputs.nvf.homeManagerModules.default]; programs.nvf = { - enable = true; + enable = osConfig.niksos.neovim; settings.vim = { viAlias = true; vimAlias = true; @@ -69,6 +73,7 @@ autocomplete.nvim-cmp.enable = true; snippets.luasnip.enable = true; mini.surround.enable = true; + # This can also be themed with stylix. Remove `targets.nvf.enable = false` in `../style/default.nix` theme = { enable = true; name = "catppuccin"; diff --git a/home/programs/other.nix b/home/programs/other.nix index bbc633f..8213aec 100644 --- a/home/programs/other.nix +++ b/home/programs/other.nix @@ -1,5 +1,10 @@ -{pkgs, ...}: { - home.packages = [ +{ + pkgs, + lib, + osConfig, + ... +}: { + home.packages = lib.mkIf osConfig.niksos.desktop [ pkgs.spotify pkgs.signal-desktop ]; diff --git a/home/shell/default.nix b/home/shell/default.nix index 4601db5..77a9967 100644 --- a/home/shell/default.nix +++ b/home/shell/default.nix @@ -1,9 +1,10 @@ { imports = [ ./fish.nix + ./other.nix + ./repl ./starship.nix ./yazi.nix ./zoxide.nix - ./other.nix ]; } diff --git a/home/shell/other.nix b/home/shell/other.nix index ab9c508..9000fb7 100644 --- a/home/shell/other.nix +++ b/home/shell/other.nix @@ -5,5 +5,7 @@ pkgs.ear2ctl # FIXME: only when bluetooth enabled pkgs.bluetui + + pkgs.typst #FIXME: move to flake shell ]; } diff --git a/home/shell/repl/default.nix b/home/shell/repl/default.nix new file mode 100644 index 0000000..bc9c287 --- /dev/null +++ b/home/shell/repl/default.nix @@ -0,0 +1,26 @@ +# copied from https://github.com/fufexan/dotfiles/blob/main/pkgs/repl/default.nix +{pkgs, ...}: let + repl = ./lib.nix; + example = command: desc: ''\n\u001b[33m ${command}\u001b[0m - ${desc}''; +in { + home.packages = [ + (pkgs.writeShellScriptBin + "repl" + '' + case "$1" in + "-h"|"--help"|"help") + printf "%b\n\e[4mUsage\e[0m: \ + ${example "repl" "Loads system flake if available."} \ + ${example "repl /path/to/flake.nix" "Loads specified flake."}\n" + ;; + *) + if [ -z "$1" ]; then + nix repl ${repl} + else + nix repl --arg flakePath $(${pkgs.coreutils}/bin/readlink -f $1 | ${pkgs.gnused}/bin/sed 's|/flake.nix||') ${repl} + fi + ;; + esac + '') + ]; +} diff --git a/home/shell/repl/lib.nix b/home/shell/repl/lib.nix new file mode 100644 index 0000000..7a2f2b3 --- /dev/null +++ b/home/shell/repl/lib.nix @@ -0,0 +1,50 @@ +# Copied from https://github.com/fufexan/dotfiles/blob/main/lib/repl.nix +{ + flakePath ? null, + hostnamePath ? "/etc/hostname", + registryPath ? /etc/nix/registry.json, +}: let + inherit (builtins) getFlake head match currentSystem readFile pathExists filter fromJSON; + + selfFlake = + if pathExists registryPath + then filter (it: it.from.id == "self") (fromJSON (readFile registryPath)).flakes + else []; + + flakePath' = + toString + ( + if flakePath != null + then flakePath + else if selfFlake != [] + then (head selfFlake).to.path + else "/etc/nixos" + ); + + flake = + if pathExists flakePath' + then getFlake flakePath' + else {}; + hostname = + if pathExists hostnamePath + then head (match "([a-zA-Z0-9\\-]+)\n" (readFile hostnamePath)) + else ""; + + nixpkgsFromInputsPath = flake.inputs.nixpkgs.outPath or ""; + nixpkgs = + flake.pkgs.${currentSystem}.nixpkgs + or ( + if nixpkgsFromInputsPath != "" + then import nixpkgsFromInputsPath {} + else {} + ); + + nixpkgsOutput = removeAttrs (nixpkgs // nixpkgs.lib or {}) ["options" "config"]; +in + {inherit flake;} + // flake + // builtins + // (flake.nixosConfigurations or {}) + // flake.nixosConfigurations.${hostname} or {} + // nixpkgsOutput + // {getFlake = path: getFlake (toString path);} diff --git a/home/style/default.nix b/home/style/default.nix index 4dc9506..faf8fbe 100644 --- a/home/style/default.nix +++ b/home/style/default.nix @@ -1,4 +1,5 @@ { + osConfig, config, inputs, pkgs, @@ -9,7 +10,7 @@ ]; stylix = { - enable = true; + enable = osConfig.niksos.desktop; image = ./background.png; polarity = "dark"; @@ -25,9 +26,14 @@ }; iconTheme = { enable = true; - package = pkgs.tela-circle-icon-theme; #FIXME: Swap out for normal tela icons once https://github.com/NixOS/nixpkgs/issues/381521 is upstream. - dark = "Tela-circle-dark"; - light = "Tela-circle-dark"; + package = pkgs.tela-icon-theme; + dark = "Tela-dark"; + light = "Tela-dark"; + }; + + targets = { + gnome-text-editor.enable = false; # Creates an overlay in home-manager land which isn't allowed with globalPkgs. + nvf.enable = false; # I'd like to be able to read my code, thank you. }; # base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-frappe.yaml"; diff --git a/home/wayland/default.nix b/home/wayland/default.nix index a177b0c..b1171b6 100644 --- a/home/wayland/default.nix +++ b/home/wayland/default.nix @@ -1,4 +1,12 @@ -{pkgs, ...}: { +{ + pkgs, + lib, + osConfig, + ... +}: let + inherit (lib) mkIf; + inherit (osConfig.niksos) desktop; +in { imports = [ ./fuzzel.nix ./hyprland @@ -6,11 +14,11 @@ ./mako.nix ]; - home.packages = [ + home.packages = mkIf desktop [ pkgs.wl-clipboard ]; - home.sessionVariables = { + home.sessionVariables = mkIf desktop { QT_QPA_PLATFORM = "wayland"; SDL_VIDEODRIVER = "wayland"; XDG_SESSION_TYPE = "wayland"; diff --git a/home/wayland/fuzzel.nix b/home/wayland/fuzzel.nix index ba6b182..57894ef 100644 --- a/home/wayland/fuzzel.nix +++ b/home/wayland/fuzzel.nix @@ -1,11 +1,11 @@ { - config, + osConfig, pkgs, lib, ... }: { programs.fuzzel = { - enable = true; + enable = osConfig.niksos.desktop; settings.main = { launch-prefix = "${lib.getExe pkgs.uwsm} app --"; }; diff --git a/home/wayland/hyprland/binds.nix b/home/wayland/hyprland/binds.nix index d1559de..728e6d3 100644 --- a/home/wayland/hyprland/binds.nix +++ b/home/wayland/hyprland/binds.nix @@ -1,5 +1,6 @@ { config, + osConfig, lib, pkgs, ... @@ -49,68 +50,74 @@ ) 10); in { - wayland.windowManager.hyprland.settings = { - "$mod" = "ALT"; + config = lib.mkIf osConfig.niksos.desktop { + home.file.".XCompose".text = '' + : "¯\\_(ツ)_/¯" # Shrug. + ''; - bindm = [ - "$mod, mouse:272, movewindow" - "$mod, mouse:273, resizewindow" - "$mod ALT, mouse:272, resizewindow" - ]; + wayland.windowManager.hyprland.settings = { + "$mod" = "ALT"; - bind = - [ - "$mod SHIFT, E, exec, uwsm stop" - "$mod, Q, killactive," - "$mod, F, fullscreen," - "$mod, SPACE, togglefloating," - "$mod, O, pseudo," - "$mod ALT, ,resizeactive," + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod ALT, mouse:272, resizewindow" + ]; - "$mod, D, exec, ${fuzzel}" - "$mod, Return, exec, ${foot}" - "$mod Shift, Return, exec, ${firefox}" - "$mod, Escape, exec, ${hyprlock}" + bind = + [ + "$mod SHIFT, E, exec, uwsm stop" + "$mod, Q, killactive," + "$mod, F, fullscreen," + "$mod, SPACE, togglefloating," + "$mod, O, pseudo," + "$mod ALT, ,resizeactive," - "$mod, A, exec, ${pulsemixer}" - "$mod, B, exec, ${bluetui}" - "$mod, N, exec, ${nmtui}" - '' - $mod, S, exec, bash -c 'hyprctl notify -1 5000 "rgb(${base0D})" "$(${getExe (import ./scripts.nix {inherit pkgs;}).statusnotify})"' - '' + "$mod, D, exec, ${fuzzel}" + "$mod, Return, exec, ${foot}" + "$mod Shift, Return, exec, ${firefox}" + "$mod, Escape, exec, ${hyprlock}" - "$mod, Print, exec, ${grimblast} copy area" - ", Print, exec, ${grimblast} save area - | ${swappy} -f -" + "$mod, A, exec, ${pulsemixer}" + "$mod, B, exec, ${bluetui}" + "$mod, N, exec, ${nmtui}" + '' + $mod, S, exec, bash -c 'hyprctl notify -1 5000 "rgb(${base0D})" "$(${getExe (import ./scripts.nix {inherit pkgs;}).statusnotify})"' + '' - "$mod, h, movefocus, l" - "$mod, l, movefocus, r" - "$mod, k, movefocus, u" - "$mod, j, movefocus, d" + "$mod, Print, exec, ${grimblast} copy area" + ", Print, exec, ${grimblast} save area - | ${swappy} -f -" - "$mod SHIFT, h, movewindow, l" - "$mod SHIFT, l, movewindow, r" - "$mod SHIFT, k, movewindow, u" - "$mod SHIFT, j, movewindow, d" - ] - ++ workspaces; + "$mod, h, movefocus, l" + "$mod, l, movefocus, r" + "$mod, k, movefocus, u" + "$mod, j, movefocus, d" - bindl = [ - # media controls - ", XF86AudioPlay, exec, ${playerctl} play-pause" - ", XF86AudioPrev, exec, ${playerctl} previous" - ", XF86AudioNext, exec, ${playerctl} next" + "$mod SHIFT, h, movewindow, l" + "$mod SHIFT, l, movewindow, r" + "$mod SHIFT, k, movewindow, u" + "$mod SHIFT, j, movewindow, d" + ] + ++ workspaces; - # volume - ", XF86AudioMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle" - ", XF86AudioMicMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - ]; + bindl = [ + # media controls + ", XF86AudioPlay, exec, ${playerctl} play-pause" + ", XF86AudioPrev, exec, ${playerctl} previous" + ", XF86AudioNext, exec, ${playerctl} next" - bindle = [ - # volume - ", XF86AudioRaiseVolume, exec, ${wpctl} set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%+" - ", XF86AudioLowerVolume, exec, ${wpctl} set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%-" - ",XF86MonBrightnessUp, exec, ${brightnessctl} s 10%+" - ",XF86MonBrightnessDown, exec, ${brightnessctl} s 10%-" - ]; + # volume + ", XF86AudioMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, ${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]; + + bindle = [ + # volume + ", XF86AudioRaiseVolume, exec, ${wpctl} set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%+" + ", XF86AudioLowerVolume, exec, ${wpctl} set-volume -l '1.0' @DEFAULT_AUDIO_SINK@ 6%-" + ",XF86MonBrightnessUp, exec, ${brightnessctl} s 10%+" + ",XF86MonBrightnessDown, exec, ${brightnessctl} s 10%-" + ]; + }; }; } diff --git a/home/wayland/hyprland/default.nix b/home/wayland/hyprland/default.nix index 8364acf..59852c2 100644 --- a/home/wayland/hyprland/default.nix +++ b/home/wayland/hyprland/default.nix @@ -1,4 +1,5 @@ { + osConfig, lib, pkgs, ... @@ -14,10 +15,11 @@ in { ]; wayland.windowManager.hyprland = { - enable = true; + enable = osConfig.niksos.desktop; settings = { env = [ "QT_WAYLAND_DISABLE_WINDOWDECORATION,1" + "NIXOS_OZONE_WL,1" ]; exec-once = [ "${uwsm} finalize" diff --git a/home/wayland/hyprlock.nix b/home/wayland/hyprlock.nix index 2f437b2..3ed7b91 100644 --- a/home/wayland/hyprlock.nix +++ b/home/wayland/hyprlock.nix @@ -1,8 +1,12 @@ -{config, ...}: let +{ + config, + osConfig, + ... +}: let inherit (config.lib.stylix.colors) base05; in { programs.hyprlock = { - enable = true; + enable = osConfig.niksos.desktop; settings = { general = { diff --git a/home/wayland/mako.nix b/home/wayland/mako.nix index b8052a4..6683488 100644 --- a/home/wayland/mako.nix +++ b/home/wayland/mako.nix @@ -1,3 +1,6 @@ -{ - services.mako.enable = true; +{osConfig, ...}: { + services.mako = { + enable = osConfig.niksos.desktop; + defaultTimeout = 5000; + }; } diff --git a/hosts/laptop/default.nix b/hosts/laptop/default.nix index 75ec7de..6d82b24 100644 --- a/hosts/laptop/default.nix +++ b/hosts/laptop/default.nix @@ -4,6 +4,15 @@ ./virt.nix ]; + niksos = { + bluetooth = true; + fingerprint = true; + games = true; + desktop = true; + portable = true; + neovim = true; + }; + home-manager.users.jsw.wayland.windowManager.hyprland.settings.monitor = ["eDP-1,2880x1920@120,0x0,1.5,vrr,1"]; services = { fprintd.enable = true; diff --git a/system/core/defaultPackages.nix b/system/core/defaultPackages.nix new file mode 100644 index 0000000..e03f027 --- /dev/null +++ b/system/core/defaultPackages.nix @@ -0,0 +1,3 @@ +{ + environment.defaultPackages = []; +} diff --git a/system/hardware/bluetooth.nix b/system/hardware/bluetooth.nix index d5ac2fe..5d08c73 100644 --- a/system/hardware/bluetooth.nix +++ b/system/hardware/bluetooth.nix @@ -1,20 +1,16 @@ -# { -# lib, -# config, -# ... -# }: { -# options.niksos.bluetooth = lib.mkEnableOption; -# -# config = lib.mkIf config.niksos.bluetooth { -# hardware.bluetooth = { -# enable = true; -# input.General.ClassicBondedOnly = false; -# }; -# }; -# } { - hardware.bluetooth = { - enable = true; - input.General.ClassicBondedOnly = false; + lib, + config, + pkgs, + ... +}: { + options.niksos.bluetooth = lib.mkEnableOption "bluetooth related stuff."; + + config = lib.mkIf config.niksos.bluetooth { + hardware.bluetooth = { + enable = true; + input.General.ClassicBondedOnly = false; + }; + environment.systemPackages = [pkgs.bluetui]; }; } diff --git a/system/hardware/fingerprint.nix b/system/hardware/fingerprint.nix index 366fa60..d8e8160 100644 --- a/system/hardware/fingerprint.nix +++ b/system/hardware/fingerprint.nix @@ -1,3 +1,8 @@ { - services.fprintd.enable = true; + config, + lib, + ... +}: { + options.niksos.fingerprint = lib.mkEnableOption "fingerprint support."; + config.services.fprintd.enable = config.niksos.fingerprint; } diff --git a/system/hardware/fwupd.nix b/system/hardware/fwupd.nix index a62f709..a243521 100644 --- a/system/hardware/fwupd.nix +++ b/system/hardware/fwupd.nix @@ -1,3 +1,3 @@ -{ - services.fwupd.enable = true; +{lib, ...}: { + services.fwupd.enable = lib.mkDefault true; } diff --git a/system/network/default.nix b/system/network/default.nix index c169ca9..93ceba7 100644 --- a/system/network/default.nix +++ b/system/network/default.nix @@ -1,28 +1,26 @@ # networking configuration {pkgs, ...}: { + imports = [ + ./avahi.nix + ./tailscale.nix + ]; + networking = { # use quad9 with DNS over TLS nameservers = ["9.9.9.9#dns.quad9.net"]; - networkmanager = { enable = true; dns = "systemd-resolved"; wifi.powersave = true; }; }; + users.groups.NetworkManager = {}; - services = { - openssh = { - enable = true; - settings.UseDns = true; - }; - - # DNS resolver - resolved = { - enable = true; - dnsovertls = "opportunistic"; - }; + services.resolved = { + # DNS resolver that tries to encrypt dns traffic + enable = true; + dnsovertls = "opportunistic"; }; - systemd.services.NetworkManager-wait-online.serviceConfig.ExecStart = ["" "${pkgs.networkmanager}/bin/nm-online -q"]; + systemd.services.NetworkManager-wait-online.enable = false; } diff --git a/system/programs/default.nix b/system/programs/default.nix index 27952b7..1f6b866 100644 --- a/system/programs/default.nix +++ b/system/programs/default.nix @@ -1,10 +1,10 @@ { imports = [ ./fish.nix - ./fonts.nix ./games.nix ./home-manager.nix ./hyprland.nix + ./neovim.nix ./polkit.nix ./xdg.nix ]; diff --git a/system/programs/fonts.nix b/system/programs/fonts.nix deleted file mode 100644 index 0db7b78..0000000 --- a/system/programs/fonts.nix +++ /dev/null @@ -1,42 +0,0 @@ -{} -# Migrated to home-manager stylix. -# {pkgs, ...}: { -# fonts = { -# packages = with pkgs; [ -# # icon fonts -# material-symbols -# -# # Sans(Serif) fonts -# libertinus -# noto-fonts -# noto-fonts-cjk-sans -# noto-fonts-emoji -# roboto -# (google-fonts.override {fonts = ["Inter"];}) -# -# # monospace fonts -# jetbrains-mono -# -# # nerdfonts -# nerd-fonts.jetbrains-mono -# nerd-fonts.symbols-only -# ]; -# -# # causes more issues than it solves -# enableDefaultPackages = false; -# -# # user defined fonts -# # the reason there's Noto Color Emoji everywhere is to override DejaVu's -# # B&W emojis that would sometimes show instead of some Color emojis -# fontconfig.defaultFonts = let -# addAll = builtins.mapAttrs (_: v: v ++ ["Noto Color Emoji"]); -# in -# addAll { -# serif = ["Libertinus Serif"]; -# sansSerif = ["Inter"]; -# monospace = ["JetBrains Mono Nerd Font"]; -# emoji = []; -# }; -# }; -# } - diff --git a/system/programs/games.nix b/system/programs/games.nix index bc9d3ec..1a97134 100644 --- a/system/programs/games.nix +++ b/system/programs/games.nix @@ -1,22 +1,64 @@ -{pkgs, ...}: { - programs = { - gamescope = { - enable = true; - capSysNice = true; - args = [ - "--rt" - "--expose-wayland" - ]; - }; +{ + config, + pkgs, + lib, + ... +}: { + options.niksos.games = lib.mkEnableOption "gaming related stuff."; + config = lib.mkIf config.niksos.games { + nixpkgs.overlays = [ + (final: prev: let + version = "1.4.2"; + hash = "sha256-xe0qlbtt06CUK8bXyaGDtCcHOXpSnkbuvcxaDJjeS/c="; + npmHash = "sha256-/+NhlQydGS6+2jEjpbwycwKplVo/++wcdPiBNY3R3FI="; + cargoHash = "sha256-VwzGbm34t7mg9ndmTkht6Ho32NQ+6uxuPTKi3+VrhYo="; + in { + gale = prev.gale.overrideAttrs (new: old: { + src = prev.fetchFromGitHub { + inherit version hash; + owner = "Kesomannen"; + repo = "gale"; + rev = "1.4.2"; + }; + npmDeps = prev.fetchNpmDeps { + hash = npmHash; + name = "${new.pname}-${new.version}-npm-deps"; + inherit (new) src; + }; + cargoDeps = prev.rustPlatform.fetchCargoVendor { + inherit + (new) + pname + version + src + cargoRoot + ; + hash = cargoHash; + }; + }); + }) + ]; + users.users.jsw.packages = [pkgs.gale]; - steam = { - enable = true; + programs = { + gamescope = { + enable = true; + capSysNice = true; + args = [ + "--rt" + "--expose-wayland" + ]; + }; - extraCompatPackages = [ - pkgs.proton-ge-bin - ]; + steam = { + enable = true; - gamescopeSession.enable = true; + extraCompatPackages = [ + pkgs.proton-ge-bin + ]; + + gamescopeSession.enable = true; + }; }; }; } diff --git a/system/programs/hyprland.nix b/system/programs/hyprland.nix index 6b132c1..3202614 100644 --- a/system/programs/hyprland.nix +++ b/system/programs/hyprland.nix @@ -1,10 +1,19 @@ -{pkgs, ...}: { - programs.hyprland = { - enable = true; - withUWSM = true; +{ + config, + pkgs, + lib, + ... +}: { + options.niksos.desktop = lib.mkEnableOption "desktop related stuff."; + config = lib.mkIf config.niksos.desktop { + programs.hyprland = { + enable = true; + withUWSM = true; + }; + environment.systemPackages = [ + #FIXME: migrated to home-manager + pkgs.kitty # This is the default config's terminal and also my main one. + ]; + environment.sessionVariables.NIXOS_OZONE_WL = "1"; # Makes electron apps use wayland. }; - environment.systemPackages = [ - pkgs.kitty # This is the default config's terminal and also my main one. - ]; - environment.sessionVariables.NIXOS_OZONE_WL = "1"; # Makes electron apps use wayland. } diff --git a/system/programs/neovim.nix b/system/programs/neovim.nix new file mode 100644 index 0000000..0608a57 --- /dev/null +++ b/system/programs/neovim.nix @@ -0,0 +1,4 @@ +{lib, ...}: { + options.niksos.neovim = lib.mkEnableOption "the neovim editor"; + # The actual config resides in NixOS/home/programs/neovim. +} diff --git a/system/programs/polkit.nix b/system/programs/polkit.nix index 25aaa8e..2b3f5a4 100644 --- a/system/programs/polkit.nix +++ b/system/programs/polkit.nix @@ -1,6 +1,11 @@ -{pkgs, ...}: { +{ + config, + lib, + pkgs, + ... +}: { systemd = { - user.services.polkit-gnome-authentication-agent-1 = { + user.services.polkit-gnome-authentication-agent-1 = lib.mkIf config.niksos.desktop { description = "polkit-gnome-authentication-agent-1"; wantedBy = ["graphical-session.target"]; wants = ["graphical-session.target"]; diff --git a/system/programs/xdg.nix b/system/programs/xdg.nix index 209796f..18c971f 100644 --- a/system/programs/xdg.nix +++ b/system/programs/xdg.nix @@ -1,5 +1,10 @@ -{pkgs, ...}: { - xdg.portal = { +{ + pkgs, + config, + lib, + ... +}: { + xdg.portal = lib.mkIf config.niksos.desktop { enable = true; xdgOpenUsePortal = true; config = { diff --git a/system/services/default.nix b/system/services/default.nix index 8700217..c4d122c 100644 --- a/system/services/default.nix +++ b/system/services/default.nix @@ -4,6 +4,6 @@ ./kanata.nix ./pipewire.nix ./power.nix - ./tailscale.nix + ./ssh.nix ]; } diff --git a/system/services/greetd.nix b/system/services/greetd.nix index 47a5684..2558b1f 100644 --- a/system/services/greetd.nix +++ b/system/services/greetd.nix @@ -3,21 +3,23 @@ lib, ... }: { - # greetd display manager - services.greetd = let - session = { - command = "${lib.getExe config.programs.uwsm.package} start hyprland-uwsm.desktop"; - user = "jsw"; - }; - in { - enable = true; + config = lib.mkIf config.niksos.desktop { + # greetd display manager + services.greetd = let + session = { + command = "${lib.getExe config.programs.uwsm.package} start hyprland-uwsm.desktop"; + user = "jsw"; + }; + in { + enable = true; - settings = { - terminal.vt = 1; - default_session = session; - initial_session = session; + settings = { + terminal.vt = 1; + default_session = session; + initial_session = session; + }; }; + + programs.uwsm.enable = true; }; - - programs.uwsm.enable = true; } diff --git a/system/services/pipewire.nix b/system/services/pipewire.nix index c715467..7450c98 100644 --- a/system/services/pipewire.nix +++ b/system/services/pipewire.nix @@ -1,11 +1,19 @@ -{lib, ...}: { - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - jack.enable = true; - pulse.enable = true; - }; +{ + config, + lib, + pkgs, + ... +}: { + config = lib.mkIf config.niksos.desktop { + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + jack.enable = true; + pulse.enable = true; + }; - services.pulseaudio.enable = lib.mkForce false; + environment.systemPackages = [pkgs.pulsemixer]; + services.pulseaudio.enable = lib.mkForce false; # gnome enables it + }; } diff --git a/system/services/power.nix b/system/services/power.nix index 390611b..087f1e0 100644 --- a/system/services/power.nix +++ b/system/services/power.nix @@ -1,5 +1,10 @@ { - services = { + config, + lib, + ... +}: { + options.niksos.portable = lib.mkEnableOption "battery optimisers"; + config.services = lib.mkIf config.niksos.portable { logind = { powerKey = "suspend-then-hibernate"; powerKeyLongPress = "poweroff"; diff --git a/system/services/ssh.nix b/system/services/ssh.nix new file mode 100644 index 0000000..48d6c4b --- /dev/null +++ b/system/services/ssh.nix @@ -0,0 +1,6 @@ +{ + services.openssh = { + enable = true; + settings.UseDns = true; + }; +} diff --git a/system/services/tailscale.nix b/system/services/tailscale.nix deleted file mode 100644 index d886410..0000000 --- a/system/services/tailscale.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - services.tailscale.enable = true; -}