Compare commits

...

2 commits

18 changed files with 1189 additions and 98 deletions

102
flake.lock generated
View file

@ -90,11 +90,11 @@
"bt-tracker": {
"flake": false,
"locked": {
"lastModified": 1745971833,
"narHash": "sha256-Hmt7smJEB2aKw3XW02Vzgr0bTULpM1CtSy1MTecmIxs=",
"lastModified": 1746087093,
"narHash": "sha256-UFTBJnKCGkRXxWQT4vi85SdI15I/sQf2Ldr63BftiHs=",
"owner": "XIU2",
"repo": "TrackersListCollection",
"rev": "10919722f131dbac0413cdbd385ff0b634d3d7fe",
"rev": "3ce9324a2612bd84051d3dc30bb9d5a5a7804e95",
"type": "github"
},
"original": {
@ -352,11 +352,11 @@
"zon2nix": "zon2nix"
},
"locked": {
"lastModified": 1745971585,
"narHash": "sha256-v8QVD+V7CCVZ+QHk2mdT2X3U9FIe2vEoOVsgnQBjZ5I=",
"lastModified": 1746045191,
"narHash": "sha256-nqwo0TXEwYLTRjbj+akj30SkpXtVozEzaSAIyp41yTA=",
"owner": "ghostty-org",
"repo": "ghostty",
"rev": "b3edc88010e38946072a58fe336081ed104c9d44",
"rev": "2b4f1f8b84ac7960ecd4b9d06bc11cf47f0b9ee9",
"type": "github"
},
"original": {
@ -462,11 +462,11 @@
]
},
"locked": {
"lastModified": 1745987135,
"narHash": "sha256-8Up4QPuMZEJBU0eefAY+nUe7DYKQQzvaHnMpNdwRgKA=",
"lastModified": 1746040799,
"narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d2b3e6c83d457aa0e7f9344c61c3fed32bad0f7e",
"rev": "5f217e5a319f6c186283b530f8c975e66c028433",
"type": "github"
},
"original": {
@ -486,11 +486,11 @@
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1745943971,
"narHash": "sha256-syIS3vBo7DX/cP49bfZPYmw3vhMCmyrnD6HiUlOAvx8=",
"lastModified": 1746059639,
"narHash": "sha256-Ert1XJsjWZ+aFuH5dLBOZwQGOR+ZAY/f3NnhaNNcGfw=",
"owner": "jj-vcs",
"repo": "jj",
"rev": "3ab9e098d778969a91d46290615c436ab41d71f9",
"rev": "1b300fefa2170bfaf239d1e91c9085b6aa9bbeff",
"type": "github"
},
"original": {
@ -550,11 +550,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
"lastModified": 1745965399,
"narHash": "sha256-RxoK/Eo9cWGtGMl3enYu/LH/SAcFGR2PWuAifQm4dUc=",
"lastModified": 1746090057,
"narHash": "sha256-rjwQyWvMtXdE0QWyDOEyH8GYckZxJcu+zIXNclLRUm4=",
"owner": "sodiboo",
"repo": "niri-flake",
"rev": "bc29338ba733e4c1b94c3ed134baabfea587627e",
"rev": "a6c4c6ac17e6cd0062ac7c4b73676a90f5600c7b",
"type": "github"
},
"original": {
@ -583,11 +583,11 @@
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1745913113,
"narHash": "sha256-/Iph65fWHox7tVyfzw0+AGyCqL2FGuHSt+xjFUsxbOk=",
"lastModified": 1746087578,
"narHash": "sha256-bPmkPoFqt1Fzrjm0YSnA6rYoVTbJvhBv7DRLzyq3Sw0=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "5f117c61dc4dd91564e02b32836e98dd0e648246",
"rev": "68589cd5a1e043e1b49116c2add4a880dce93a3b",
"type": "github"
},
"original": {
@ -604,11 +604,11 @@
"rust-overlay": "rust-overlay_3"
},
"locked": {
"lastModified": 1745924915,
"narHash": "sha256-RuMUtaplJkaAtqkdG1+cD3trqmO2ykKqfK+3+HXPUVA=",
"lastModified": 1746023382,
"narHash": "sha256-AaT+V44rqEQbXvouwPnU7wJHiLR5Bq8uRvh7f+sOPgQ=",
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"rev": "329a9d639f0418cce05937a823f43b2b64191653",
"rev": "1d54ddac1e8db612bea4f279a0ea48ab35f420be",
"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": 1745921652,
"narHash": "sha256-hEAvEN+y/OQ7wA7+u3bFJwXSe8yoSf2QaOMH3hyTJTQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "330d0a4167924b43f31cc9406df363f71b768a02",
"rev": "b000159bba69b0106a42f65e52dbf27f77aca9d3",
"type": "github"
},
"original": {
@ -698,11 +698,11 @@
},
"nixpkgs-stable_3": {
"locked": {
"lastModified": 1745742390,
"narHash": "sha256-1rqa/XPSJqJg21BKWjzJZC7yU0l/YTVtjRi0RJmipus=",
"lastModified": 1745921652,
"narHash": "sha256-hEAvEN+y/OQ7wA7+u3bFJwXSe8yoSf2QaOMH3hyTJTQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "26245db0cb552047418cfcef9a25da91b222d6c7",
"rev": "b000159bba69b0106a42f65e52dbf27f77aca9d3",
"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": 1746072213,
"narHash": "sha256-ucL/XWOitrhH44UymaGhBYtEsr1DTqb1BDZuVOpGAYc=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "0388c30f59e860307b2ef0ba93f38d2e525a153e",
"rev": "debaa11dba5904b70a4e9db1d9c68ae9a6f82ebd",
"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": 1745980514,
"narHash": "sha256-CITAeiuXGjDvT5iZBXr6vKVWQwsUQLJUMFO91bfJFC4=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "e552fe1b16ffafd678ebe061c22b117e050769ed",
"rev": "7fbdae44b0f40ea432e46fd152ad8be0f8f41ad6",
"type": "github"
},
"original": {
@ -920,11 +902,11 @@
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1745962538,
"narHash": "sha256-UmQxI4ocPZUVHuxtaQN3zNNBU8KLK9x2gXl2kWUhMKY=",
"lastModified": 1746065148,
"narHash": "sha256-NR8JCOo9BrK0T7iPmNKR+fa/zS+do+GgAMVg4fwMvYM=",
"owner": "danth",
"repo": "stylix",
"rev": "764fd32955e79f2742a7975f0150175f93add2fb",
"rev": "b4d3137c5ce960073a991bd99a333cad1b233101",
"type": "github"
},
"original": {

View file

@ -35,14 +35,6 @@
};
};
oskars-dotfiles = {
type = "github";
owner = "oskardotglobal";
repo = ".dotfiles";
ref = "nix";
flake = false;
};
betterfox-nix = {
type = "github";
owner = "HeitorAugustoLN";

View file

@ -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;
};
};

View file

@ -0,0 +1,20 @@
{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)
(leaf "position" {
x = 0;
y = 0;
})
(leaf "transform" "normal")
])
];
};
}

View file

@ -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;
};
};

View file

@ -0,0 +1,57 @@
{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")
])
(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;
# };
# };
# };
# };
};
}

View file

@ -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
)

View file

@ -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;
};

View file

@ -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.;
};
}
];
}

View file

@ -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;
};
};

View file

@ -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)

View file

@ -1 +0,0 @@
{inputs, ...}: import "${inputs.oskars-dotfiles}/overlays/spotx.nix"

View file

@ -0,0 +1,6 @@
{outputs, ...}: final: prev: let
inherit (final) stdenv;
inherit (stdenv.hostPlatform) system;
in {
spotify = outputs.packages."${system}".spotifyx;
}

View file

@ -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,

View file

@ -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";

View file

@ -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 {};

View file

@ -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"

26
pkgs/spotifyx.nix Normal file
View file

@ -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
'';
})