diff --git a/.zed/settings.json b/.zed/settings.json index c70ecd6..2c63c08 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -1,11 +1,2 @@ { - "languages": { - "Nix": { - "formatter": { - "external": { - "command": "alejandra" - } - } - } - } } diff --git a/README.md b/README.md index 6b8ac59..cf7a4ea 100644 --- a/README.md +++ b/README.md @@ -14,23 +14,23 @@ Hey, you. This is my nixos configurations. - david@Tytonidae -| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | -| -------------- | --------- | ----------- | ------ | -------- | --------------- | ------- | -------------- | -| default | niri | fish + bash | helix | ghostty | fuzzel | firefox | gdm | -| cosmic | cosmic de | fish + bash | helix | ghostty | cosmic-launcher | firefox | cosmic-greeter | -| kde | kde | fish + bash | helix | ghostty | - | firefox | sddm | +| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | +| -------------- | --------- | ----------- | ----------- | -------- | --------------- | ------- | ---------------- | +| default | niri | fish + bash | helix + zed | ghostty | fuzzel | firefox | greetd + regreet | +| cosmic | cosmic de | fish + bash | helix + zed | ghostty | cosmic-launcher | firefox | cosmic-greeter | +| kde | kde | fish + bash | helix + zed | ghostty | - | firefox | sddm | - david@Akun -| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | -| -------------- | ------- | ----------- | ------ | -------- | -------- | ------- | -------------- | -| default | cosmic | fish + bash | helix | ghostty | - | firefox | cosmic-greeter | +| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | +| -------------- | ------- | ----------- | ----------- | -------- | -------- | ------- | ---------------- | +| default | niri | fish + bash | helix + zed | ghostty | - | firefox | greetd + regreet | - alice@Cape -| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | -| -------------- | ------- | ----------- | ------ | -------- | -------- | ------- | --- | -| default | - | fish + bash | helix | - | - | - | - | +| Specialisation | DE / WM | Shell | Editor | Terminal | Launcher | Browser | DM | +| -------------- | ------- | ----------- | ------ | -------- | -------- | ------- | -- | +| default | - | fish + bash | helix | - | - | - | - | ## FlakE OutputS and StructurE diff --git a/flake.lock b/flake.lock index 6e443dd..c9a2e91 100644 --- a/flake.lock +++ b/flake.lock @@ -90,11 +90,11 @@ "bt-tracker": { "flake": false, "locked": { - "lastModified": 1745971833, - "narHash": "sha256-Hmt7smJEB2aKw3XW02Vzgr0bTULpM1CtSy1MTecmIxs=", + "lastModified": 1746144670, + "narHash": "sha256-l1Roga5tbx5775OQDD34lQAntmlU56A3HKqJrK86P2I=", "owner": "XIU2", "repo": "TrackersListCollection", - "rev": "10919722f131dbac0413cdbd385ff0b634d3d7fe", + "rev": "0a9ac8d11e9e67649edf33b378190e17ce1e7e9e", "type": "github" }, "original": { @@ -113,11 +113,11 @@ ] }, "locked": { - "lastModified": 1741008028, - "narHash": "sha256-Dypah+fVZ30hCRG96hu1Vmi0DHQSv6XKfy8S6kiS2CQ=", + "lastModified": 1746104585, + "narHash": "sha256-wfrNTYEx5ZfTvUKquiBc+hW44wg3VrPPMcPLnQ0q7bY=", "owner": "daeuniverse", "repo": "flake.nix", - "rev": "2d2ea1661c89efc9c12781572b95f4bb700f2a4a", + "rev": "44f8089999107b0bfe4b7cf909f56d8da67ec951", "type": "github" }, "original": { @@ -352,11 +352,11 @@ "zon2nix": "zon2nix" }, "locked": { - "lastModified": 1745971585, - "narHash": "sha256-v8QVD+V7CCVZ+QHk2mdT2X3U9FIe2vEoOVsgnQBjZ5I=", + "lastModified": 1746118269, + "narHash": "sha256-nWCxF4Fl53yaJzxlHVDkDZNrWGsrYk9f5ondtMa+S04=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "b3edc88010e38946072a58fe336081ed104c9d44", + "rev": "e79bf71f2322fa5d54af07f2985f8460290f2085", "type": "github" }, "original": { @@ -441,11 +441,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1745933300, - "narHash": "sha256-BJpxqZar6vrmv1MtZIjmBa7x+0HEP8kmYeFejz7m2uc=", + "lastModified": 1746132885, + "narHash": "sha256-naxkk3EcVXP8gPeG/mQq2i37ITvAZs1AKw7K7u5DXuE=", "owner": "helix-editor", "repo": "helix", - "rev": "1c32fb2d4df3f06f96ca33db7d9f9b15297c7f8d", + "rev": "aa3fad84ef136b482eb5f84abbf109f25af9700a", "type": "github" }, "original": { @@ -462,11 +462,11 @@ ] }, "locked": { - "lastModified": 1745987135, - "narHash": "sha256-8Up4QPuMZEJBU0eefAY+nUe7DYKQQzvaHnMpNdwRgKA=", + "lastModified": 1746134275, + "narHash": "sha256-sxfY7TIP59o2hcueanoRAtg833PiNroZkQDwlKJxGvs=", "owner": "nix-community", "repo": "home-manager", - "rev": "d2b3e6c83d457aa0e7f9344c61c3fed32bad0f7e", + "rev": "015f1913109d44c36e683b55f0e47e283b383caa", "type": "github" }, "original": { @@ -486,11 +486,11 @@ "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1745943971, - "narHash": "sha256-syIS3vBo7DX/cP49bfZPYmw3vhMCmyrnD6HiUlOAvx8=", + "lastModified": 1746133891, + "narHash": "sha256-ZZVz8ZPa+T9/pKt3khNKZ79dya5qWX1nMhJ1D46vpE8=", "owner": "jj-vcs", "repo": "jj", - "rev": "3ab9e098d778969a91d46290615c436ab41d71f9", + "rev": "0eceed9832d53b8e870123c88d1c1f0514fb061b", "type": "github" }, "original": { @@ -550,11 +550,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1745965399, - "narHash": "sha256-RxoK/Eo9cWGtGMl3enYu/LH/SAcFGR2PWuAifQm4dUc=", + "lastModified": 1746142190, + "narHash": "sha256-t36K3TWLMRWoGyjYyo+H8bBquDcp4orZqNZVagWNjwY=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "bc29338ba733e4c1b94c3ed134baabfea587627e", + "rev": "af701c1c16c289b1b14f333d844b4f756308d244", "type": "github" }, "original": { @@ -583,11 +583,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1745913113, - "narHash": "sha256-/Iph65fWHox7tVyfzw0+AGyCqL2FGuHSt+xjFUsxbOk=", + "lastModified": 1746124654, + "narHash": "sha256-LmhkAt2KLvf8lp+kEUQuTFmmv7iXO8IkwwSaPasfXJw=", "owner": "YaLTeR", "repo": "niri", - "rev": "5f117c61dc4dd91564e02b32836e98dd0e648246", + "rev": "6c9705dd4b2eaba25f024d1a3efd7943fd393632", "type": "github" }, "original": { @@ -604,11 +604,11 @@ "rust-overlay": "rust-overlay_3" }, "locked": { - "lastModified": 1745924915, - "narHash": "sha256-RuMUtaplJkaAtqkdG1+cD3trqmO2ykKqfK+3+HXPUVA=", + "lastModified": 1746109800, + "narHash": "sha256-sjDpqdvbQaiA6OAsgLE4niz6hmmCpoUH0cl5zyfu6FI=", "owner": "lilyinstarlight", "repo": "nixos-cosmic", - "rev": "329a9d639f0418cce05937a823f43b2b64191653", + "rev": "9fe1aa7b6a1043003b38f36626dd29b52247d720", "type": "github" }, "original": { @@ -635,11 +635,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1745794561, - "narHash": "sha256-T36rUZHUART00h3dW4sV5tv4MrXKT7aWjNfHiZz7OHg=", + "lastModified": 1745930157, + "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5461b7fa65f3ca74cef60be837fd559a8918eaa0", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", "type": "github" }, "original": { @@ -682,11 +682,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1745868005, - "narHash": "sha256-hZScOyQphT4RUmSEJX+2OxjIlGgLwSd8iW1LNtAWIOs=", + "lastModified": 1746055187, + "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "330d0a4167924b43f31cc9406df363f71b768a02", + "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", "type": "github" }, "original": { @@ -698,11 +698,11 @@ }, "nixpkgs-stable_3": { "locked": { - "lastModified": 1745742390, - "narHash": "sha256-1rqa/XPSJqJg21BKWjzJZC7yU0l/YTVtjRi0RJmipus=", + "lastModified": 1746055187, + "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26245db0cb552047418cfcef9a25da91b222d6c7", + "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", "type": "github" }, "original": { @@ -714,11 +714,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1745930157, - "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", + "lastModified": 1746064326, + "narHash": "sha256-r7IZkN9NhK/IO9/J6D9ih2P1OXb67nr5HaQ1YAte18w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", + "rev": "91bf6dffa21c7709607c9fdbf9a6acb44e7a0a5d", "type": "github" }, "original": { @@ -738,11 +738,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1745459908, - "narHash": "sha256-bWqgohVf/py9EW3bLS/dYbenD2p9N2/Qsw1+CJk1S04=", + "lastModified": 1746056780, + "narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=", "owner": "nix-community", "repo": "NUR", - "rev": "dbc4ba3233b2bf951521177bf0ee0a7679959035", + "rev": "d476cd0972dd6242d76374fcc277e6735715c167", "type": "github" }, "original": { @@ -754,11 +754,11 @@ "nur-rycee": { "flake": false, "locked": { - "lastModified": 1745752599, - "narHash": "sha256-vX5uq4wv7FeNeeFtsTPXQ9n2hd92NFXI+u9sg1K8OhA=", + "lastModified": 1746158597, + "narHash": "sha256-IugPXmlzFdAMxeqACtd40yLslezVDxUqPvpEn5LWcp4=", "owner": "rycee", "repo": "nur-expressions", - "rev": "0388c30f59e860307b2ef0ba93f38d2e525a153e", + "rev": "47711ca43fc3f91fa566038cd2681812c6c3252d", "type": "gitlab" }, "original": { @@ -768,23 +768,6 @@ "type": "gitlab" } }, - "oskars-dotfiles": { - "flake": false, - "locked": { - "lastModified": 1743338345, - "narHash": "sha256-7eOm26Y7nybMFe6uNbw4yPFgMd+CLyZyByXvpAvqmUo=", - "owner": "oskardotglobal", - "repo": ".dotfiles", - "rev": "182de5a67cd6fd30a9450d6bb7d5dd4d41272c5f", - "type": "github" - }, - "original": { - "owner": "oskardotglobal", - "ref": "nix", - "repo": ".dotfiles", - "type": "github" - } - }, "root": { "inputs": { "betterfox-nix": "betterfox-nix", @@ -804,7 +787,6 @@ "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_2", "nur-rycee": "nur-rycee", - "oskars-dotfiles": "oskars-dotfiles", "sops-nix": "sops-nix", "stylix": "stylix" } @@ -859,11 +841,11 @@ ] }, "locked": { - "lastModified": 1745894113, - "narHash": "sha256-dxO3caQZMv/pMtcuXdi+SnAtyki6HFbSf1IpgQPXZYc=", + "lastModified": 1746067100, + "narHash": "sha256-6JeEbboDvRjLwB9kzCnmWj+f+ZnMtKOe5c2F1VBpaTs=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e552fe1b16ffafd678ebe061c22b117e050769ed", + "rev": "026e8fedefd6b167d92ed04b195c658d95ffc7a5", "type": "github" }, "original": { @@ -920,11 +902,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1745962538, - "narHash": "sha256-UmQxI4ocPZUVHuxtaQN3zNNBU8KLK9x2gXl2kWUhMKY=", + "lastModified": 1746158690, + "narHash": "sha256-Pe2emz36QL8GOILXvvmH/agqkspZFrcOrQxv6uufaEc=", "owner": "danth", "repo": "stylix", - "rev": "764fd32955e79f2742a7975f0150175f93add2fb", + "rev": "bc38629511dd9cc78c5ca37a6e546fa66330d50e", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cfe52c5..a0c0423 100644 --- a/flake.nix +++ b/flake.nix @@ -35,14 +35,6 @@ }; }; - oskars-dotfiles = { - type = "github"; - owner = "oskardotglobal"; - repo = ".dotfiles"; - ref = "nix"; - flake = false; - }; - betterfox-nix = { type = "github"; owner = "HeitorAugustoLN"; diff --git a/home/david/configurations/Akun/default.nix b/home/david/configurations/Akun/default.nix index 709398f..7156728 100644 --- a/home/david/configurations/Akun/default.nix +++ b/home/david/configurations/Akun/default.nix @@ -5,6 +5,9 @@ rootPath, ... }: { + imports = [ + ./niri.nix + ]; youthlic = { xdg-dirs.enable = true; programs = let @@ -46,7 +49,6 @@ accounts.email.enable = true; programs = { openssh.enable = true; - niri.enable = true; }; }; diff --git a/home/david/configurations/Akun/niri.nix b/home/david/configurations/Akun/niri.nix new file mode 100644 index 0000000..02e597f --- /dev/null +++ b/home/david/configurations/Akun/niri.nix @@ -0,0 +1,21 @@ +{inputs, ...}: let + inherit (inputs.niri-flake.lib.kdl) node leaf plain flag; +in { + david.programs.niri = { + enable = true; + extraConfig = let + output = node "output"; + in [ + (output "eDP-1" [ + (leaf "mode" "1920x1200@60.018") + (leaf "scale" 1.0) + (flag "focus-at-startup") + (leaf "position" { + x = 0; + y = 0; + }) + (leaf "transform" "normal") + ]) + ]; + }; +} diff --git a/home/david/configurations/Tytonidae/default.nix b/home/david/configurations/Tytonidae/default.nix index 01f4cb8..964ad5c 100644 --- a/home/david/configurations/Tytonidae/default.nix +++ b/home/david/configurations/Tytonidae/default.nix @@ -6,6 +6,9 @@ unixName, ... }: { + imports = [ + ./niri.nix + ]; youthlic = { xdg-dirs.enable = true; programs = let @@ -49,7 +52,6 @@ wallpaper.enable = true; accounts.email.enable = true; programs = { - niri.enable = true; openssh.enable = true; }; }; diff --git a/home/david/configurations/Tytonidae/niri.nix b/home/david/configurations/Tytonidae/niri.nix new file mode 100644 index 0000000..dc6c1af --- /dev/null +++ b/home/david/configurations/Tytonidae/niri.nix @@ -0,0 +1,58 @@ +{inputs, ...}: let + inherit (inputs.niri-flake.lib.kdl) node leaf plain flag; +in { + david.programs.niri = { + enable = true; + extraConfig = let + output = node "output"; + in [ + (output "DP-1" [ + (leaf "mode" "2560x1440@169.900") + (leaf "scale" 1.0) + (leaf "position" { + x = 0; + y = 0; + }) + (leaf "transform" "normal") + (flag "focus-at-startup") + ]) + (output "eDP-1" [ + (leaf "mode" "2560x1440@165.003") + (leaf "scale" 1.5) + (leaf "position" { + x = 2560; + y = 0; + }) + (leaf "transform" "normal") + ]) + ]; + # settings = { + # outputs = { + # DP-1 = { + # mode = { + # width = 2560; + # height = 1440; + # refresh = 169.900; + # }; + # scale = 1; + # position = { + # x = 0; + # y = 0; + # }; + # }; + # eDP-1 = { + # mode = { + # width = 2560; + # height = 1440; + # refresh = 165.003; + # }; + # scale = 1.5; + # position = { + # x = 2560; + # y = 0; + # }; + # }; + # }; + # }; + }; +} diff --git a/home/david/modules/programs/niri/config.nix b/home/david/modules/programs/niri/config.nix new file mode 100644 index 0000000..77c1f6f --- /dev/null +++ b/home/david/modules/programs/niri/config.nix @@ -0,0 +1,561 @@ +{ + config, + pkgs, + lib, + osConfig, + inputs, + ... +}: let + inherit (lib) getExe getExe'; + inherit + (inputs.niri-flake.lib.kdl) + # node with args, props and children + # node:: \lambda name -> [argOrProp] -> [child] -> Output + # arg: single value + # prop: attr contains one or more key-value pair + # children: node + node + # node without children + # leaf:: \lambda name -> [argOrProp] -> Output + leaf + # node only name + # flag:: \lambda name -> Output + flag + # node without args/props + # plain:: \lambda name -> [child] -> Output + plain + ; + + DISPLAY = ":1"; + + bash = getExe config.programs.bash.package; + swaylock = getExe config.programs.swaylock.package; + fuzzel = getExe config.programs.fuzzel.package; + waybar = getExe config.programs.waybar.package; + swaync = getExe config.services.swaync.package; + fcitx5 = getExe' osConfig.i18n.inputMethod.package "fcitx5"; + + polkit-kde-agent = getExe' pkgs.kdePackages.polkit-kde-agent-1 "polkit-kde-agent"; + wpctl = getExe' pkgs.wireplumber "wpctl"; + swaybg = getExe pkgs.swaybg; + xwayland-satellite = getExe pkgs.xwayland-satellite; + ghostty = getExe config.programs.ghostty.package; + wl-paste = getExe' pkgs.wl-clipboard "wl-paste"; + wl-copy = getExe' pkgs.wl-clipboard "wl-copy"; + cliphist = getExe' pkgs.cliphist "cliphist"; +in + ( + let + spawn = leaf "spawn"; + in [ + (plain "binds" [ + (plain "Mod+V" [ + (spawn [bash "-c" "${cliphist} list | ${fuzzel} --dmenu | ${cliphist} decode | ${wl-copy}"]) + ]) + (plain "Mod+Shift+P" [ + (spawn [swaylock "--screenshots" "--clock" "--indicator" "--indicator-radius" "100" "--indicator-thickness" "7" "--effect-blur" "7x5" "--effect-vignette" "0.5:0.5" "--grace" "2" "--fade-in" "0.5"]) + ]) + (plain "Mod+Shift+Slash" [ + (flag "show-hotkey-overlay") + ]) + (plain "Mod+T" [ + (spawn [ + ghostty + ]) + ]) + (plain "Mod+Shift+T" [ + (flag "toggle-column-tabbed-display") + ]) + (plain "Mod+Space" [ + (spawn fuzzel) + ]) + (node "XF86AudioRaiseVolume" {allow-when-locked = true;} [ + (spawn [wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"]) + ]) + (node "XF86AudioLowerVolume" {allow-when-locked = true;} [ + (spawn [wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]) + ]) + (node "XF86AudioMute" {allow-when-locked = true;} [ + (spawn [wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "toggle"]) + ]) + (node "XF86AudioMicMute" {allow-when-locked = true;} [ + (spawn [wpctl "set-volume" "@DEFAULT_AUDIO_SOURCE@" "toggle"]) + ]) + (plain "Mod+Q" [ + (flag "close-window") + ]) + (node "Mod+O" {repeat = false;} [ + (flag "toggle-overview") + ]) + (plain "Mod+Left" [ + (flag "focus-column-left") + ]) + (plain "Mod+Down" [ + (flag "focus-window-down") + ]) + (plain "Mod+Up" [ + (flag "focus-window-up") + ]) + (plain "Mod+Right" [ + (flag "focus-column-right") + ]) + (plain "Mod+H" [ + (flag "focus-column-or-monitor-left") + ]) + (plain "Mod+J" [ + (flag "focus-window-or-workspace-down") + ]) + (plain "Mod+K" [ + (flag "focus-window-or-workspace-up") + ]) + (plain "Mod+L" [ + (flag "focus-column-or-monitor-right") + ]) + (plain "Mod+Shift+Left" [ + (flag "move-column-left") + ]) + (plain "Mod+Shift+Down" [ + (flag "move-window-down") + ]) + (plain "Mod+Shift+Up" [ + (flag "move-window-up") + ]) + (plain "Mod+Shift+Right" [ + (flag "move-column-right") + ]) + (plain "Mod+Shift+H" [ + (flag "move-column-left-or-to-monitor-left") + ]) + (plain "Mod+Shift+J" [ + (flag "move-window-down-or-to-workspace-down") + ]) + (plain "Mod+Shift+K" [ + (flag "move-window-up-or-to-workspace-up") + ]) + (plain "Mod+Shift+L" [ + (flag "move-column-right-or-to-monitor-right") + ]) + (plain "Mod+Home" [ + (flag "focus-column-first") + ]) + (plain "Mod+End" [ + (flag "focus-column-last") + ]) + (plain "Mod+Ctrl+Home" [ + (flag "move-column-to-first") + ]) + (plain "Mod+Ctrl+End" [ + (flag "move-column-to-last") + ]) + (plain "Mod+Ctrl+Left" [ + (flag "focus-monitor-left") + ]) + (plain "Mod+Ctrl+Down" [ + (flag "focus-monitor-down") + ]) + (plain "Mod+Ctrl+Up" [ + (flag "focus-monitor-up") + ]) + (plain "Mod+Ctrl+Right" [ + (flag "focus-monitor-right") + ]) + (plain "Mod+Ctrl+H" [ + (flag "focus-monitor-left") + ]) + (plain "Mod+Ctrl+J" [ + (flag "focus-monitor-down") + ]) + (plain "Mod+Ctrl+K" [ + (flag "focus-monitor-up") + ]) + (plain "Mod+Ctrl+L" [ + (flag "focus-monitor-right") + ]) + (plain "Mod+Shift+Ctrl+Left" [ + (flag "move-column-to-monitor-left") + ]) + (plain "Mod+Shift+Ctrl+Down" [ + (flag "move-column-to-monitor-down") + ]) + (plain "Mod+Shift+Ctrl+Up" [ + (flag "move-column-to-monitor-up") + ]) + (plain "Mod+Shift+Ctrl+Right" [ + (flag "move-column-to-monitor-right") + ]) + (plain "Mod+Shift+Ctrl+H" [ + (flag "move-column-to-monitor-left") + ]) + (plain "Mod+Shift+Ctrl+J" [ + (flag "move-column-to-monitor-down") + ]) + (plain "Mod+Shift+Ctrl+K" [ + (flag "move-column-to-monitor-up") + ]) + (plain "Mod+Shift+Ctrl+L" [ + (flag "move-column-to-monitor-right") + ]) + (plain "Mod+Page_Down" [ + (flag "focus-workspace-down") + ]) + (plain "Mod+Page_Up" [ + (flag "focus-workspace-up") + ]) + (plain "Mod+U" [ + (flag "focus-workspace-down") + ]) + (plain "Mod+I" [ + (flag "focus-workspace-up") + ]) + (plain "Mod+Shift+Page_Down" [ + (flag "move-column-to-workspace-down") + ]) + (plain "Mod+Shift+Page_Up" [ + (flag "move-column-to-workspace-up") + ]) + (plain "Mod+Shift+U" [ + (flag "move-column-to-workspace-down") + ]) + (plain "Mod+Shift+I" [ + (flag "move-column-to-workspace-up") + ]) + (plain "Mod+Ctrl+Page_Down" [ + (flag "move-workspace-down") + ]) + (plain "Mod+Ctrl+Page_Up" [ + (flag "move-workspace-up") + ]) + (plain "Mod+Ctrl+U" [ + (flag "move-workspace-down") + ]) + (plain "Mod+Ctrl+I" [ + (flag "move-workspace-up") + ]) + (node "Mod+Shift+WheelScrollDown" {cooldown-ms = 150;} [ + (flag "focus-workspace-down") + ]) + (node "Mod+Shift+WheelScrollUp" {cooldown-ms = 150;} [ + (flag "focus-workspace-up") + ]) + (plain "Mod+WheelScrollDown" [ + (flag "focus-column-right") + ]) + (plain "Mod+WheelScrollUp" [ + (flag "focus-column-left") + ]) + (plain "Mod+1" [ + (leaf "focus-workspace" 1) + ]) + (plain "Mod+2" [ + (leaf "focus-workspace" 2) + ]) + (plain "Mod+3" [ + (leaf "focus-workspace" 3) + ]) + (plain "Mod+4" [ + (leaf "focus-workspace" 4) + ]) + (plain "Mod+5" [ + (leaf "focus-workspace" 5) + ]) + (plain "Mod+6" [ + (leaf "focus-workspace" 6) + ]) + (plain "Mod+7" [ + (leaf "focus-workspace" 7) + ]) + (plain "Mod+8" [ + (leaf "focus-workspace" 8) + ]) + (plain "Mod+9" [ + (leaf "focus-workspace" 9) + ]) + (plain "Mod+Shift+1" [ + (leaf "move-column-to-workspace" 1) + ]) + (plain "Mod+Shift+2" [ + (leaf "move-column-to-workspace" 2) + ]) + (plain "Mod+Shift+3" [ + (leaf "move-column-to-workspace" 3) + ]) + (plain "Mod+Shift+4" [ + (leaf "move-column-to-workspace" 4) + ]) + (plain "Mod+Shift+5" [ + (leaf "move-column-to-workspace" 5) + ]) + (plain "Mod+Shift+6" [ + (leaf "move-column-to-workspace" 6) + ]) + (plain "Mod+Shift+7" [ + (leaf "move-column-to-workspace" 7) + ]) + (plain "Mod+Shift+8" [ + (leaf "move-column-to-workspace" 8) + ]) + (plain "Mod+Shift+9" [ + (leaf "move-column-to-workspace" 9) + ]) + (plain "Mod+F" [ + (flag "toggle-window-floating") + ]) + (plain "Mod+Shift+F" [ + (flag "toggle-windowed-fullscreen") + ]) + (plain "Mod+Tab" [ + (flag "focus-window-previous") + ]) + (plain "Mod+Shift+Tab" [ + (flag "switch-focus-between-floating-and-tiling") + ]) + (plain "Mod+BracketLeft" [ + (flag "consume-or-expel-window-left") + ]) + (plain "Mod+BracketRight" [ + (flag "consume-or-expel-window-right") + ]) + (plain "Mod+Comma" [ + (flag "consume-window-into-column") + ]) + (plain "Mod+Period" [ + (flag "expel-window-from-column") + ]) + (plain "Mod+R" [ + (flag "switch-preset-column-width") + ]) + (plain "Mod+Shift+R" [ + (flag "switch-preset-window-height") + ]) + (plain "Mod+Ctrl+R" [ + (flag "reset-window-height") + ]) + (plain "Mod+M" [ + (flag "maximize-column") + ]) + (plain "Mod+Shift+M" [ + (flag "fullscreen-window") + ]) + (plain "Mod+Z" [ + (flag "center-column") + ]) + (plain "Mod+Minus" [ + (leaf "set-column-width" "-10%") + ]) + (plain "Mod+Equal" [ + (leaf "set-column-width" "+10%") + ]) + (plain "Mod+Shift+Minus" [ + (leaf "set-window-height" "-10%") + ]) + (plain "Mod+Shift+Equal" [ + (leaf "set-window-height" "+10%") + ]) + (plain "Print" [ + (flag "screenshot") + ]) + (plain "Ctrl+Print" [ + (flag "screenshot-screen") + ]) + (plain "Alt+Print" [ + (flag "screenshot-window") + ]) + (plain "Mod+Shift+Q" [ + (flag "quit") + ]) + (plain "Mod+E" [ + (flag "expand-column-to-available-width") + ]) + (plain "Mod+Shift+S" [ + (flag "toggle-keyboard-shortcuts-inhibit") + ]) + (plain "Mod+Shift+C" [ + (flag "set-dynamic-cast-window") + ]) + (plain "Mod+Shift+Ctrl+C" [ + (flag "clear-dynamic-cast-target") + ]) + ]) + ] # binds + ) + ++ ( + let + spawn-at-startup = leaf "spawn-at-startup"; + in [ + (leaf "screenshot-path" "${config.xdg.userDirs.pictures}/screenshots/%Y-%m-%d_%H:%M:%S.png") + (plain "hotkey-overlay" [ + (flag "skip-at-startup") + ]) + (flag "prefer-no-csd") + (spawn-at-startup [waybar]) + (spawn-at-startup [swaync]) + (spawn-at-startup [swaybg "-i" "${config.home.homeDirectory}/wallpaper/01.png"]) + (spawn-at-startup [fcitx5 "-d" "--replace"]) + (spawn-at-startup [xwayland-satellite DISPLAY]) + (spawn-at-startup [polkit-kde-agent]) + (spawn-at-startup [wl-paste "--watch" cliphist "store"]) + (plain "input" [ + (plain "touchpad" [ + (leaf "click-method" "clickfinger") + (flag "dwt") + (leaf "scroll-method" "two-finger") + (leaf "tap-button-map" "left-right-middle") + ]) + ]) + (plain "cursor" [ + (leaf "hide-after-inactive-ms" 3000) + (flag "hide-when-typing") + ]) + (plain "layout" [ + (plain "border" [ + (leaf "width" 4) + (leaf "active-color" "#7fc8ff") + (leaf "inactive-color" "#505050") + ]) + (plain "focus-ring" [ + (flag "off") + (leaf "width" 4) + (leaf "active-color" "#7fc8ff") + (leaf "inactive-color" "#505050") + ]) + (plain "tab-indicator" [ + (flag "hide-when-single-tab") + ]) + (plain "preset-column-widths" [ + (leaf "proportion" (1. / 4.)) + (leaf "proportion" (1. / 3.)) + (leaf "proportion" (1. / 2.)) + (leaf "proportion" (2. / 3.)) + (leaf "proportion" (3. / 4.)) + (leaf "proportion" (4. / 4.)) + ]) + (flag "always-center-single-column") + (leaf "center-focused-column" "never") + (leaf "default-column-display" "tabbed") + (plain "default-column-width" [ + (leaf "proportion" (1. / 2.)) + ]) + (flag "empty-workspace-above-first") + (leaf "gaps" 16) + ]) + (plain "animations" [ + (plain "window-close" [ + (leaf "spring" { + damping-ratio = 1.0; + stiffness = 800; + epsilon = 0.0001; + }) + ]) + ]) + (plain "environment" [ + (leaf "DISPLAY" DISPLAY) + ]) + ] # others + ) + ++ ( + let + window-rule = plain "window-rule"; + match = leaf "match"; + in [ + (window-rule [ + (leaf "draw-border-with-background" true) + (leaf "geometry-corner-radius" 12.0) + (leaf "clip-to-geometry" true) + ]) + (window-rule [ + (match {app-id = "^showmethekey-gtk$";}) + (leaf "geometry-corner-radius" 0.0) + (leaf "clip-to-geometry" false) + (leaf "open-floating" true) + (leaf "open-focused" false) + (plain "default-column-width" [ + (leaf "fixed" 300) + ]) + (plain "default-window-height" [ + (leaf "fixed" 70) + ]) + (leaf "draw-border-with-background" true) + (leaf "default-floating-position" { + relative-to = "bottom-right"; + x = 20; + y = 20; + }) + (plain "focus-ring" [ + (flag "off") + ]) + (plain "border" [ + (flag "off") + ]) + (plain "shadow" [ + (flag "off") + ]) + (leaf "baba-is-float" true) + (leaf "tiled-state" false) + ]) + (window-rule [ + (match {app-id = "^org\\.keepassxc\\.KeePassXC$";}) + (match {app-id = "^org\\.gnome\\.World\\.Secrets$";}) + (leaf "block-out-from" "screen-capture") + ]) + (window-rule [ + (match { + app-id = "^com\\.mitchellh\\.ghostty$"; + is-active = true; + }) + (leaf "draw-border-with-background" false) + ]) + (window-rule [ + (match { + app-id = "^com\\.mitchellh\\.ghostty$"; + is-active = false; + }) + (leaf "opacity" 0.8) + (leaf "draw-border-with-background" false) + ]) + (window-rule [ + (match {is-window-cast-target = true;}) + (plain "focus-ring" [ + (leaf "active-color" "#f38ba8") + (leaf "inactive-color" "#7d0d2d") + ]) + (plain "border" [ + (leaf "active-color" "#f38ba8") + (leaf "inactive-color" "#7d0d2d") + ]) + (plain "tab-indicator" [ + (leaf "active-color" "#f38ba8") + (leaf "inactive-color" "#7d0d2d") + ]) + (plain "shadow" [ + (flag "on") + ]) + ]) + (window-rule [ + (match { + app-id = "^org\\.telegram\\.desktop$"; + title = "Media viewer"; + }) + (leaf "open-floating" true) + (leaf "open-fullscreen" false) + ]) + ] # window-rule + ) + ++ ( + let + layer-rule = plain "layer-rule"; + match = leaf "match"; + in [ + (layer-rule [ + (match {namespace = "^swaync-notification-window$";}) + (match {namespace = "^swaync-control-center$";}) + (leaf "block-out-from" "screen-capture") + ]) + (layer-rule [ + (match {namespace = "^launcher$";}) + (plain "shadow" [ + (flag "on") + ]) + (leaf "geometry-corner-radius" 10.0) + ]) + ] # layer-rule + ) diff --git a/home/david/modules/programs/niri/default.nix b/home/david/modules/programs/niri/default.nix index 17b0286..2654b7e 100644 --- a/home/david/modules/programs/niri/default.nix +++ b/home/david/modules/programs/niri/default.nix @@ -1,19 +1,25 @@ { config, lib, + pkgs, + inputs, ... -}: let +} @ args: let cfg = config.david.programs.niri; in { options = { david.programs.niri = { enable = lib.mkEnableOption "niri"; + extraConfig = lib.mkOption { + type = inputs.niri-flake.lib.kdl.types.kdl-document; + }; }; }; config = lib.mkIf cfg.enable { youthlic.programs.niri = { enable = true; - config = ./config.kdl; + # settings = lib.mkMerge [(import ./settings.nix args) cfg.settings]; + config = (lib.toList (import ./config.nix args)) ++ (lib.toList cfg.extraConfig); }; david.programs.wluma.enable = true; }; diff --git a/home/david/modules/programs/niri/settings.nix b/home/david/modules/programs/niri/settings.nix new file mode 100644 index 0000000..63037d6 --- /dev/null +++ b/home/david/modules/programs/niri/settings.nix @@ -0,0 +1,402 @@ +{ + config, + pkgs, + lib, + osConfig, + ... +}: let + inherit (lib) getExe getExe'; + DISPLAY = ":1"; + bash = getExe pkgs.bash; + swaylock = getExe pkgs.swaylock-effects; + fuzzel = getExe pkgs.fuzzel; + wpctl = getExe' pkgs.wireplumber "wpctl"; + waybar = getExe pkgs.waybar; + swaync = getExe pkgs.swaynotificationcenter; + swaybg = getExe pkgs.swaybg; + fcitx5 = getExe' osConfig.i18n.inputMethod.package "fcitx5"; + xwayland-satellite = getExe pkgs.xwayland-satellite; + polkit-kde-agent = getExe' pkgs.kdePackages.polkit-kde-agent-1 "polkit-kde-agent"; + wl-paste = getExe' pkgs.wl-clipboard "wl-paste"; + wl-copy = getExe' pkgs.wl-clipboard "wl-copy"; + cliphist = getExe' pkgs.cliphist "cliphist"; + ghostty = getExe pkgs.ghostty; +in { + binds = let + inherit (config.lib.niri.actions) spawn show-hotkey-overlay toggle-column-tabbed-display close-window toggle-overview focus-column-left focus-window-down focus-window-up focus-column-right focus-column-or-monitor-left focus-window-or-workspace-down focus-window-or-workspace-up focus-column-or-monitor-right move-column-left move-window-down move-window-up move-column-right move-column-left-or-to-monitor-left move-window-down-or-to-workspace-down move-window-up-or-to-workspace-up move-column-right-or-to-monitor-right focus-column-first focus-column-last move-column-to-first move-column-to-last focus-monitor-left focus-monitor-down focus-monitor-up focus-monitor-right move-column-to-monitor-left move-column-to-monitor-down move-column-to-monitor-up move-column-to-monitor-right focus-workspace-up focus-workspace-down move-column-to-workspace-down move-column-to-workspace-up move-workspace-down move-workspace-up focus-workspace move-column-to-workspace toggle-window-floating toggle-windowed-fullscreen focus-window-previous switch-focus-between-floating-and-tiling consume-or-expel-window-left consume-or-expel-window-right consume-window-into-column expel-window-from-column switch-preset-column-width switch-preset-window-height reset-window-height maximize-column fullscreen-window center-column set-column-width set-window-height screenshot screenshot-window quit expand-column-to-available-width toggle-keyboard-shortcuts-inhibit set-dynamic-cast-window clear-dynamic-cast-target; + in { + "Mod+V".action = spawn bash "-c" "${cliphist} list | ${fuzzel} --dmenu | ${cliphist} decode | ${wl-copy}"; + "Mod+Shift+P".action = spawn swaylock "--screenshots" "--clock" "--indicator" "--indicator-radius" "100" "--indicator-thickness" "7" "--effect-blur" "7x5" "--effect-vignette" "0.5:0.5" "--grace" "2" "--fade-in" "0.5"; + "Mod+Shift+Slash".action = show-hotkey-overlay; + "Mod+T".action = spawn ghostty; + "Mod+Shift+T".action = toggle-column-tabbed-display; + "Mod+Space".action = spawn fuzzel; + XF86AudioRaiseVolume = { + action = spawn wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; + allow-when-locked = true; + }; + XF86AudioLowerVolume = { + action = spawn wpctl "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; + allow-when-locked = true; + }; + XF86AudioMute = { + action = spawn wpctl "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; + allow-when-locked = true; + }; + XF86AudioMicMute = { + action = spawn wpctl "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; + allow-when-locked = true; + }; + "Mod+Q".action = close-window; + "Mod+O".action = toggle-overview; + "Mod+Left".action = focus-column-left; + "Mod+Down".action = focus-window-down; + "Mod+Up".action = focus-window-up; + "Mod+Right".action = focus-column-right; + "Mod+H".action = focus-column-or-monitor-left; + "Mod+J".action = focus-window-or-workspace-down; + "Mod+K".action = focus-window-or-workspace-up; + "Mod+L".action = focus-column-or-monitor-right; + "Mod+Shift+Left".action = move-column-left; + "Mod+Shift+Down".action = move-window-down; + "Mod+Shift+Up".action = move-window-up; + "Mod+Shift+Right".action = move-column-right; + "Mod+Shift+H".action = move-column-left-or-to-monitor-left; + "Mod+Shift+J".action = move-window-down-or-to-workspace-down; + "Mod+Shift+K".action = move-window-up-or-to-workspace-up; + "Mod+Shift+L".action = move-column-right-or-to-monitor-right; + "Mod+Home".action = focus-column-first; + "Mod+End".action = focus-column-last; + "Mod+Ctrl+Home".action = move-column-to-first; + "Mod+Ctrl+End".action = move-column-to-last; + "Mod+Ctrl+Left".action = focus-monitor-left; + "Mod+Ctrl+Down".action = focus-monitor-down; + "Mod+Ctrl+Up".action = focus-monitor-up; + "Mod+Ctrl+Right".action = focus-monitor-right; + "Mod+Ctrl+H".action = focus-monitor-left; + "Mod+Ctrl+J".action = focus-monitor-down; + "Mod+Ctrl+K".action = focus-monitor-up; + "Mod+Ctrl+L".action = focus-monitor-right; + "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; + "Mod+Shift+Ctrl+H".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+J".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+K".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+L".action = move-column-to-monitor-right; + "Mod+Page_Down".action = focus-workspace-down; + "Mod+Page_Up".action = focus-workspace-up; + "Mod+U".action = focus-workspace-down; + "Mod+I".action = focus-workspace-up; + "Mod+Shift+Page_Down".action = move-column-to-workspace-down; + "Mod+Shift+Page_Up".action = move-column-to-workspace-up; + "Mod+Shift+U".action = move-column-to-workspace-down; + "Mod+Shift+I".action = move-column-to-workspace-up; + "Mod+Ctrl+Page_Down".action = move-workspace-down; + "Mod+Ctrl+Page_Up".action = move-workspace-up; + "Mod+Ctrl+U".action = move-workspace-down; + "Mod+Ctrl+I".action = move-workspace-up; + "Mod+Shift+WheelScrollDown" = { + action = focus-workspace-down; + cooldown-ms = 150; + }; + "Mod+Shift+WheelScrollUp" = { + action = focus-workspace-up; + cooldown-ms = 150; + }; + "Mod+WheelScrollDown".action = focus-column-right; + "Mod+WheelScrollUp".action = focus-column-left; + "Mod+1".action = focus-workspace 1; + "Mod+2".action = focus-workspace 2; + "Mod+3".action = focus-workspace 3; + "Mod+4".action = focus-workspace 4; + "Mod+5".action = focus-workspace 5; + "Mod+6".action = focus-workspace 6; + "Mod+7".action = focus-workspace 7; + "Mod+8".action = focus-workspace 8; + "Mod+9".action = focus-workspace 9; + "Mod+Shift+1".action = move-column-to-workspace 1; + "Mod+Shift+2".action = move-column-to-workspace 2; + "Mod+Shift+3".action = move-column-to-workspace 3; + "Mod+Shift+4".action = move-column-to-workspace 4; + "Mod+Shift+5".action = move-column-to-workspace 5; + "Mod+Shift+6".action = move-column-to-workspace 6; + "Mod+Shift+7".action = move-column-to-workspace 7; + "Mod+Shift+8".action = move-column-to-workspace 8; + "Mod+Shift+9".action = move-column-to-workspace 9; + "Mod+F".action = toggle-window-floating; + "Mod+Shift+F".action = toggle-windowed-fullscreen; + "Mod+Tab".action = focus-window-previous; + "Mod+Shift+Tab".action = switch-focus-between-floating-and-tiling; + "Mod+BracketLeft".action = consume-or-expel-window-left; + "Mod+BracketRight".action = consume-or-expel-window-right; + "Mod+Comma".action = consume-window-into-column; + "Mod+Period".action = expel-window-from-column; + "Mod+R".action = switch-preset-column-width; + "Mod+Shift+R".action = switch-preset-window-height; + "Mod+Ctrl+R".action = reset-window-height; + "Mod+M".action = maximize-column; + "Mod+Shift+M".action = fullscreen-window; + "Mod+Z".action = center-column; + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Equal".action = set-column-width "+10%"; + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Equal".action = set-window-height "+10%"; + "Print".action = screenshot; + # since niri add another parameter for the variant, the regex can not parse the action + # [Track] https://github.com/sodiboo/niri-flake/issues/922 + "Ctrl+Print".action.screenshot-screen = []; + "Alt+Print".action = screenshot-window; + "Mod+Shift+Q".action = quit; + "Mod+E".action = expand-column-to-available-width; + "Mod+Shift+S".action = toggle-keyboard-shortcuts-inhibit; + "Mod+Shift+C".action = set-dynamic-cast-window; + "Mod+Shift+Ctrl+C".action = clear-dynamic-cast-target; + }; + screenshot-path = "${config.xdg.userDirs.pictures}/screenshots/%Y-%m-%d_%H:%M:%S.png"; + hotkey-overlay.skip-at-startup = true; + prefer-no-csd = true; + spawn-at-startup = [ + { + command = [waybar]; + } + { + command = [swaync]; + } + { + command = [swaybg "-i" "${config.home.homeDirectory}/wallpaper/01.png"]; + } + { + command = [fcitx5 "-d" "--replace"]; + } + { + command = [xwayland-satellite DISPLAY]; + } + { + command = [polkit-kde-agent]; + } + { + command = [wl-paste "--watch" cliphist "store"]; + } + ]; + input = { + touchpad = { + click-method = "clickfinger"; + dwt = true; + scroll-method = "two-finger"; + tap-button-map = "left-right-middle"; + }; + warp-mouse-to-focus = true; + }; + cursor = { + hide-after-inactive-ms = 3000; + hide-when-typing = true; + }; + layout = { + border = { + enable = true; + width = 4; + active = { + color = "#7fc8ff"; + }; + inactive = { + color = "#505050"; + }; + }; + focus-ring = { + enable = false; + width = 4; + active = { + color = "#7fc8ff"; + }; + inactive = { + color = "#505050"; + }; + }; + preset-column-widths = [ + { + proportion = 1. / 4.; + } + { + proportion = 1. / 3.; + } + { + proportion = 1. / 2.; + } + { + proportion = 2. / 3.; + } + { + proportion = 3. / 4.; + } + { + proportion = 4. / 4.; + } + ]; + always-center-single-column = true; + center-focused-column = "never"; + default-column-display = "tabbed"; + default-column-width = { + proportion = 1. / 2.; + }; + empty-workspace-above-first = true; + gaps = 16; + }; + animations = { + enable = true; + window-close = { + spring = { + damping-ratio = 1.0; + stiffness = 800; + epsilon = 0.0001; + }; + }; + }; + environment = { + inherit DISPLAY; + }; + window-rules = [ + { + draw-border-with-background = true; + geometry-corner-radius = { + bottom-left = 12.; + bottom-right = 12.; + top-left = 12.; + top-right = 12.; + }; + clip-to-geometry = true; + } + { + matches = [ + { + app-id = "^showmethekey-gtk$"; + } + ]; + geometry-corner-radius = { + bottom-left = 0.0; + bottom-right = 0.0; + top-left = 0.0; + top-right = 0.0; + }; + clip-to-geometry = false; + open-floating = true; + open-focused = false; + default-column-width = { + fixed = 300; + }; + default-window-height = { + fixed = 70; + }; + draw-border-with-background = false; + default-floating-position = { + relative-to = "bottom-right"; + x = 20; + y = 20; + }; + focus-ring.enable = false; + border.enable = false; + shadow.enable = false; + baba-is-float = true; + # tiled-state = false; + } + { + matches = [ + { + app-id = "^org\\.keepassxc\\.KeePassXC$"; + } + { + app-id = "^org\\.gnome\\.World\\.Secrets$"; + } + ]; + block-out-from = "screen-capture"; + } + { + matches = [ + { + app-id = "^com\\.mitchellh\\.ghostty$"; + is-active = true; + } + ]; + draw-border-with-background = false; + } + { + matches = [ + { + app-id = "^com\\.mitchellh\\.ghostty$"; + is-active = false; + } + ]; + opacity = 0.8; + draw-border-with-background = false; + } + { + matches = [ + { + is-window-cast-target = true; + } + ]; + focus-ring = { + active = { + color = "#f38ba8"; + }; + inactive = { + color = "#7d0d2d"; + }; + }; + border = { + active = { + color = "#f38ba8"; + }; + inactive = { + color = "#7d0d2d"; + }; + }; + tab-indicator = { + active = { + color = "#f38ba8"; + }; + inactive = { + color = "#7d0d2d"; + }; + }; + shadow.enable = true; + } + { + matches = [ + { + app-id = "^org\\.telegram\\.desktop$"; + title = "Media viewer"; + } + ]; + open-floating = true; + } + ]; + layer-rules = [ + { + matches = [ + { + namespace = "^swaync-notification-window$"; + } + { + namespace = "^swaync-control-center$"; + } + ]; + block-out-from = "screen-capture"; + } + { + matches = [ + { + namespace = "^launcher$"; + } + ]; + shadow.enable = true; + geometry-corner-radius = { + top-left = 10.; + top-right = 10.; + bottom-left = 10.; + bottom-right = 10.; + }; + } + ]; +} diff --git a/home/modules/programs/niri.nix b/home/modules/programs/niri.nix index 11aa765..e68662d 100644 --- a/home/modules/programs/niri.nix +++ b/home/modules/programs/niri.nix @@ -3,6 +3,7 @@ config, lib, osConfig ? null, + inputs, ... }: let cfg = config.youthlic.programs.niri; @@ -11,12 +12,11 @@ in { options = { youthlic.programs.niri = { enable = lib.mkEnableOption "niri"; + # settings = lib.mkOption { + # type = lib.types.attrs; + # }; config = lib.mkOption { - type = lib.types.path; - example = ./config.kdl; - description = '' - the pach to config.kdl - ''; + type = inputs.niri-flake.lib.kdl.types.kdl-document; }; }; }; @@ -66,7 +66,8 @@ in { swaylock.enable = true; }; programs.niri = { - config = builtins.readFile cfg.config; + # settings = cfg.settings; + config = cfg.config; package = niri; }; }; diff --git a/home/modules/programs/zed.nix b/home/modules/programs/zed.nix index f95dce2..31dfde0 100644 --- a/home/modules/programs/zed.nix +++ b/home/modules/programs/zed.nix @@ -16,29 +16,86 @@ in { programs.zed-editor = { enable = true; extensions = [ - "nix" - "html" - "java" - "git-firely" - "make" + "asciidoc" + "basher" + "cargo-tom" + "codebook" "deno" - "java-eclipse-jdtlS" - "neocMake" - "typst" - "toml" + "docker-compose" + "dockerfile" + "fish" + "git-firefly" + "golangci-lint" + "haskell" + "html" + "hurl" + "idris2" + "java" + "java-eclipse-jdtls" + "kdl" + "kotlin" + "lua" + "make" "markdown-oxide" + "neocmake" + "nix" + "python-refactoring" + "python-requirements" + "scheme" + "toml" + "typst" + "xml" + "zig" ]; extraPackages = with pkgs; [ - nixd - nil - neocmakelsp - deno - jdt-language-server + idris2Packages.idris2Lsp + lua-language-server + bash-language-server + shfmt + hurl + cmake-language-server + kdlfmt + rustfmt + clang-tools + libxml2 + typstyle + pyright + ruff + gotools + yaml-language-server taplo - alejandra markdown-oxide + marksman + nixd + deno + alejandra + vscode-langservers-extracted + fish-lsp + tailwindcss-language-server + gopls + golangci-lint-langserver + tinymist + delve + lldb + rust-analyzer + # nil + haskell-language-server + neocmakelsp + jdt-language-server + zls ]; userSettings = { + languages = { + Nix = { + language_servers = ["nixd" "!nil"]; + formatter = { + external = { + command = "alejandra"; + arguments = ["--quiet" "--"]; + }; + }; + }; + }; soft_wrap = "editor_width"; autosave = "on_focus_change"; auto_update = false; diff --git a/nixos/configurations/Akun/default.nix b/nixos/configurations/Akun/default.nix index 6c1788a..4989924 100644 --- a/nixos/configurations/Akun/default.nix +++ b/nixos/configurations/Akun/default.nix @@ -1,5 +1,6 @@ {pkgs, ...}: { imports = [ + ./gui.nix ./hardware-configuration.nix ./stylix.nix ./users @@ -21,7 +22,6 @@ kanata.enable = true; tailscale.enable = true; }; - gui.enabled = "niri"; }; programs.gnupg.agent = { enable = true; diff --git a/nixos/configurations/Akun/gui.nix b/nixos/configurations/Akun/gui.nix new file mode 100644 index 0000000..53a3b5d --- /dev/null +++ b/nixos/configurations/Akun/gui.nix @@ -0,0 +1,20 @@ +{...}: let + extraConfig = '' + output "eDP-1" { + mode "1920x1200@60.018" + scale 1.0 + focus-at-startup + position x=0 y=0 + transform "normal" + } + window-rule { + match app-id="apps.regreet" + open-on-output "eDP-1" + } + ''; +in { + youthlic.gui = { + enabled = "niri"; + niri.extraConfig = extraConfig; + }; +} diff --git a/nixos/configurations/Tytonidae/default.nix b/nixos/configurations/Tytonidae/default.nix index 5bcc8e8..f19f633 100644 --- a/nixos/configurations/Tytonidae/default.nix +++ b/nixos/configurations/Tytonidae/default.nix @@ -2,6 +2,7 @@ lib, pkgs, inputs, + config, ... }: { imports = @@ -11,6 +12,7 @@ ++ [ ./users ./stylix.nix + ./gui.nix # Include the hardware related config ./hardware-configuration.nix @@ -44,7 +46,6 @@ owncast.enable = true; minio.enable = true; }; - gui.enabled = "niri"; }; # specialisation = { diff --git a/nixos/configurations/Tytonidae/gui.nix b/nixos/configurations/Tytonidae/gui.nix new file mode 100644 index 0000000..fc9c3f0 --- /dev/null +++ b/nixos/configurations/Tytonidae/gui.nix @@ -0,0 +1,26 @@ +{pkgs, ...}: let + extraConfig = '' + output "DP-1" { + mode "2560x1440@169.900" + scale 1.0 + position x=0 y=0 + transform "normal" + focus-at-startup + } + output "eDP-1" { + mode "2560x1440@165.003" + scale 1.5 + position x=2560 y=0 + transform "normal" + } + window-rule { + match app-id="apps.regreet" + open-on-output "DP-1" + } + ''; +in { + youthlic.gui = { + enabled = "niri"; + niri.extraConfig = extraConfig; + }; +} diff --git a/nixos/modules/gui/niri.nix b/nixos/modules/gui/niri.nix index dc42cda..faeec95 100644 --- a/nixos/modules/gui/niri.nix +++ b/nixos/modules/gui/niri.nix @@ -6,6 +6,13 @@ }: let cfg = config.youthlic.gui; in { + options = { + youthlic.gui.niri = { + extraConfig = lib.mkOption { + type = lib.types.str; + }; + }; + }; config = lib.mkIf (cfg.enabled == "niri") { qt = { enable = true; @@ -61,20 +68,49 @@ in { hardware.bluetooth = { enable = true; }; - services.xserver = { - enable = true; - xkb = { - layout = "cn"; - variant = ""; - }; - displayManager.gdm = { + services = { + greetd = let + niriConfig = pkgs.writeText "greetd-niri-config.kdl" ('' + binds {} + hotkey-overlay { + skip-at-startup + } + gestures { + hot-corners { + off + } + } + spawn-at-startup "${lib.getExe pkgs.swaybg}" "-i" "${config.stylix.image}" + '' + + config.youthlic.gui.niri.extraConfig); + in { enable = true; - wayland = true; + settings = { + default_session = { + command = "env GTK_USE_PORTAL=0 GDK_DEBUG=no-portals ${lib.getExe' config.programs.niri.package "niri"} --config ${niriConfig} -- ${lib.getExe config.programs.regreet.package}"; + }; + }; + }; + xserver = { + enable = true; + xkb = { + layout = "us"; + variant = ""; + }; + # displayManager.gdm = { + # enable = true; + # wayland = true; + # }; }; }; - programs.niri = { - enable = true; - package = pkgs.niri-unstable; + programs = { + regreet = { + enable = true; + }; + niri = { + enable = true; + package = pkgs.niri-unstable; + }; }; }; } diff --git a/overlays/modifications/default.nix b/overlays/modifications/default.nix index c5054ec..e6e39b8 100644 --- a/overlays/modifications/default.nix +++ b/overlays/modifications/default.nix @@ -2,12 +2,12 @@ inherit (prev) lib; in [ - ./spotify.nix ./niri.nix ./ghostty.nix ./juicity.nix ./dae.nix ./jujutsu.nix + ./spotifyx.nix ] |> map (file: import file args) |> (overlays: (lib.composeManyExtensions overlays) final prev) diff --git a/overlays/modifications/spotify.nix b/overlays/modifications/spotify.nix deleted file mode 100644 index 1501605..0000000 --- a/overlays/modifications/spotify.nix +++ /dev/null @@ -1 +0,0 @@ -{inputs, ...}: import "${inputs.oskars-dotfiles}/overlays/spotx.nix" diff --git a/overlays/modifications/spotifyx.nix b/overlays/modifications/spotifyx.nix new file mode 100644 index 0000000..da92346 --- /dev/null +++ b/overlays/modifications/spotifyx.nix @@ -0,0 +1,6 @@ +{outputs, ...}: final: prev: let + inherit (final) stdenv; + inherit (stdenv.hostPlatform) system; +in { + spotify = outputs.packages."${system}".spotifyx; +} diff --git a/pkgs/_sources/generated.json b/pkgs/_sources/generated.json index 7cb57b5..7d9b5ea 100644 --- a/pkgs/_sources/generated.json +++ b/pkgs/_sources/generated.json @@ -92,7 +92,7 @@ }, "rime-ice": { "cargoLocks": null, - "date": "2025-04-22", + "date": "2025-05-01", "extract": null, "name": "rime-ice", "passthru": null, @@ -104,12 +104,33 @@ "name": null, "owner": "iDvel", "repo": "rime-ice", - "rev": "7f6f4880bd5f6b7a76195c515af2e64b88ce0ec2", - "sha256": "sha256-N7EDvQX598jxNILzwTwAeu/BY9wWVBRUuTApamf4nAY=", + "rev": "5322bcd86f47d18e0785cac4a5da239664b46235", + "sha256": "sha256-BFS/pMuUlZ6pQEITZ37hotl7YUMmU7kWoHA26L+y7Pc=", "sparseCheckout": [], "type": "github" }, - "version": "7f6f4880bd5f6b7a76195c515af2e64b88ce0ec2" + "version": "5322bcd86f47d18e0785cac4a5da239664b46235" + }, + "spotx": { + "cargoLocks": null, + "date": "2025-04-23", + "extract": null, + "name": "spotx", + "passthru": null, + "pinned": false, + "src": { + "deepClone": false, + "fetchSubmodules": false, + "leaveDotGit": false, + "name": null, + "owner": "SpotX-Official", + "repo": "SpotX-Bash", + "rev": "d5a23bfc64d75979373c5fddc81641dabff051aa", + "sha256": "sha256-gYr2b9oSOB/kuK6Em3T+gAALgzpRQxvSBJNWoaJ7yvg=", + "sparseCheckout": [], + "type": "github" + }, + "version": "d5a23bfc64d75979373c5fddc81641dabff051aa" }, "tree-sitter-idris": { "cargoLocks": null, diff --git a/pkgs/_sources/generated.nix b/pkgs/_sources/generated.nix index 42df88b..1940202 100644 --- a/pkgs/_sources/generated.nix +++ b/pkgs/_sources/generated.nix @@ -1,10 +1,6 @@ # This file was generated by nvfetcher, please do not modify it manually. +{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }: { - fetchgit, - fetchurl, - fetchFromGitHub, - dockerTools, -}: { dioxionary = { pname = "dioxionary"; version = "4db80d458ff7494967c94ebb1db596abba0775b2"; @@ -14,12 +10,13 @@ fetchSubmodules = false; deepClone = false; leaveDotGit = false; - sparseCheckout = []; + sparseCheckout = [ ]; sha256 = "sha256-H5uMTtDX9hBV36MtiPPlHPaL//WM11J5kdtEhyJBZIU="; }; cargoLock."./Cargo.lock" = { lockFile = ./dioxionary-4db80d458ff7494967c94ebb1db596abba0775b2/./Cargo.lock; outputHashes = { + }; }; date = "2025-04-07"; @@ -33,7 +30,7 @@ fetchSubmodules = false; deepClone = false; leaveDotGit = false; - sparseCheckout = []; + sparseCheckout = [ ]; sha256 = "sha256-s/OYlW66mu/3MHwhZCxvQv8f/rNuCB4SLZ2jYPO5UQQ="; }; date = "2025-02-20"; @@ -48,7 +45,7 @@ fetchSubmodules = false; deepClone = false; leaveDotGit = false; - sparseCheckout = ["Sans/OTC"]; + sparseCheckout = [ "Sans/OTC" ]; sha256 = "sha256-UxbwdY2w3u6i1kBWwr5vMKvsnD3eCllN+kBrCH38KlY="; }; }; @@ -62,21 +59,33 @@ fetchSubmodules = false; deepClone = false; leaveDotGit = false; - sparseCheckout = ["Serif/OTC"]; + sparseCheckout = [ "Serif/OTC" ]; sha256 = "sha256-mfbBSdJrUCZiUUmsmndtEW6H3z6KfBn+dEftBySf2j4="; }; }; rime-ice = { pname = "rime-ice"; - version = "7f6f4880bd5f6b7a76195c515af2e64b88ce0ec2"; + version = "5322bcd86f47d18e0785cac4a5da239664b46235"; src = fetchFromGitHub { owner = "iDvel"; repo = "rime-ice"; - rev = "7f6f4880bd5f6b7a76195c515af2e64b88ce0ec2"; + rev = "5322bcd86f47d18e0785cac4a5da239664b46235"; fetchSubmodules = false; - sha256 = "sha256-N7EDvQX598jxNILzwTwAeu/BY9wWVBRUuTApamf4nAY="; + sha256 = "sha256-BFS/pMuUlZ6pQEITZ37hotl7YUMmU7kWoHA26L+y7Pc="; }; - date = "2025-04-22"; + date = "2025-05-01"; + }; + spotx = { + pname = "spotx"; + version = "d5a23bfc64d75979373c5fddc81641dabff051aa"; + src = fetchFromGitHub { + owner = "SpotX-Official"; + repo = "SpotX-Bash"; + rev = "d5a23bfc64d75979373c5fddc81641dabff051aa"; + fetchSubmodules = false; + sha256 = "sha256-gYr2b9oSOB/kuK6Em3T+gAALgzpRQxvSBJNWoaJ7yvg="; + }; + date = "2025-04-23"; }; tree-sitter-idris = { pname = "tree-sitter-idris"; @@ -87,7 +96,7 @@ fetchSubmodules = false; deepClone = false; leaveDotGit = false; - sparseCheckout = []; + sparseCheckout = [ ]; sha256 = "sha256-aOAxb0KjhSwlNX/IDvGwEysYvImgUEIDeNDOWRl1qNk="; }; name = "idris"; diff --git a/pkgs/default.nix b/pkgs/default.nix index 0c57ffa..62853ee 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -12,6 +12,7 @@ in juicity = callPackage ./juicity.nix {}; rime-ice = callPackage ./rime-ice.nix {}; dioxionary = callPackage ./dioxionary.nix {}; + spotifyx = callPackage ./spotifyx.nix {}; noto-serif-cjk = callPackage ./noto-serif-cjk.nix {}; noto-sans-cjk = callPackage ./noto-sans-cjk.nix {}; diff --git a/pkgs/helix/default.nix b/pkgs/helix/default.nix index eb9489f..af7e60b 100644 --- a/pkgs/helix/default.nix +++ b/pkgs/helix/default.nix @@ -12,6 +12,7 @@ idris2Packages.idris2Lsp lua-language-server bash-language-server + shfmt hurl cmake-language-server kdlfmt @@ -31,6 +32,7 @@ alejandra vscode-langservers-extracted fish-lsp + tailwindcss-language-server gopls golangci-lint-langserver tinymist @@ -40,6 +42,8 @@ # nil haskell-language-server neocmakelsp + jdt-language-server + zls ] ); in diff --git a/pkgs/nvfetcher.toml b/pkgs/nvfetcher.toml index a405554..3fea7d4 100644 --- a/pkgs/nvfetcher.toml +++ b/pkgs/nvfetcher.toml @@ -25,3 +25,7 @@ git.sparseCheckout = ["Serif/OTC"] src.github = "notofonts/noto-cjk" fetch.github = "notofonts/noto-cjk" git.sparseCheckout = ["Sans/OTC"] + +[spotx] +src.git = "https://github.com/SpotX-Official/SpotX-Bash.git" +fetch.github = "SpotX-Official/SpotX-Bash" diff --git a/pkgs/spotifyx.nix b/pkgs/spotifyx.nix new file mode 100644 index 0000000..3238d33 --- /dev/null +++ b/pkgs/spotifyx.nix @@ -0,0 +1,26 @@ +{ + pkgs, + srcs, + ... +}: let + inherit (srcs) spotx; +in + pkgs.spotify.overrideAttrs (final: prev: { + version = prev.version + "_spotx-${spotx.version}"; + nativeBuildInputs = + prev.nativeBuildInputs + ++ (with pkgs; [ + unzip + zip + perl + ]); + spotx = spotx.src; + postUnpack = '' + cp $spotx/spotx.sh ./spotx.sh + chmod +x ./spotx.sh + patchShebangs --build ./spotx.sh + ''; + postInstall = '' + ./spotx.sh -P $out/share/spotify -h + ''; + })