mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-05-28 18:39:31 +02:00
Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a23332ce1 | |||
| 12decc32b6 | |||
| e7e9a43dbb | |||
| 29760ddb27 | |||
| 307f5a490c | |||
| 2e53101fb7 | |||
| b6c1456f46 | |||
| cdf4ab580f | |||
| fdcc3be59d | |||
| 3c2ad0bec2 | |||
| 81dbc5b8de | |||
| 618f26017c | |||
| 4163d09af8 | |||
| 13031e30c2 | |||
| 3d2a2d50af | |||
| 3bf1b986cf | |||
| 7cf0e96efa | |||
| 87a1d56247 | |||
| def33a486b | |||
| 62bac83db4 | |||
| e0d0ff9203 | |||
| 1385a34f1a | |||
| 744fbf9ce5 | |||
| a23073bfee | |||
| 60d1909055 | |||
| cd4389a40f | |||
| d0035905e1 | |||
| fdf66fbae0 | |||
| 125bce3bc2 | |||
| 6ae7fee541 | |||
| 8d1c70cc72 | |||
| de05214ec5 | |||
| 34fdd92351 | |||
| 0c2dcc0734 | |||
| 2f47f7dc76 | |||
| 082327c693 | |||
| 1436c6c069 | |||
| b034b383d7 | |||
| 863f6a31f7 | |||
| 0cdc201974 | |||
| 40b782d94b | |||
| 23de363622 | |||
| 2195a599d6 | |||
| c58e76574e | |||
| 7fbd31a70a | |||
| e8a227dcb7 | |||
| 74420b4161 | |||
| aabe1c65fa | |||
| b25d30dd62 | |||
| 57cd863aa5 | |||
| 492708cfc7 | |||
| a5bd9c1d09 | |||
| 73642f6686 | |||
| d06fdb3076 | |||
| 956a997eb8 | |||
| f9bb934218 | |||
| 0029bdc8c7 |
@@ -100,7 +100,7 @@ repair-store *paths:
|
|||||||
# Update all Nixpkgs inputs
|
# Update all Nixpkgs inputs
|
||||||
[group('nix')]
|
[group('nix')]
|
||||||
up-nix:
|
up-nix:
|
||||||
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-ollama
|
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-patched
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
||||||
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://nixos.org/">
|
<a href="https://nixos.org/">
|
||||||
<img src="https://img.shields.io/badge/NixOS-25.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/badge/NixOS-25.11-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
||||||
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/badge/Nix%20Flakes-learning-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|||||||
Generated
+311
-601
File diff suppressed because it is too large
Load Diff
@@ -35,16 +35,18 @@
|
|||||||
|
|
||||||
# Official NixOS package source, using nixos's unstable branch by default
|
# Official NixOS package source, using nixos's unstable branch by default
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
# nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
# revert mesa to 25.2.6
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
nixpkgs-mesa.url = "github:nixos/nixpkgs/2b1f0ea3ee3952e68b164efa0a1c5e394ef2e781";
|
||||||
|
nixpkgs-2505.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||||
nixpkgs-ollama.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
|
# nixpkgs with some custom patches
|
||||||
nixpkgs-patched.url = "github:ryan4yin/nixpkgs/nixos-unstable-patched";
|
nixpkgs-patched.url = "github:ryan4yin/nixpkgs/nixos-unstable-patched";
|
||||||
|
# get some latest packages from the master branch
|
||||||
|
nixpkgs-master.url = "github:nixos/nixpkgs/master";
|
||||||
|
|
||||||
# for macos
|
# for macos
|
||||||
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin";
|
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.11-darwin";
|
||||||
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
nix-darwin = {
|
nix-darwin = {
|
||||||
url = "github:lnl7/nix-darwin";
|
url = "github:lnl7/nix-darwin";
|
||||||
@@ -54,7 +56,7 @@
|
|||||||
# home-manager, used for managing user configuration
|
# home-manager, used for managing user configuration
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/master";
|
url = "github:nix-community/home-manager/master";
|
||||||
# url = "github:nix-community/home-manager/release-25.05";
|
# url = "github:nix-community/home-manager/release-25.11";
|
||||||
|
|
||||||
# The `follows` keyword in inputs is used for inheritance.
|
# The `follows` keyword in inputs is used for inheritance.
|
||||||
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
||||||
@@ -62,8 +64,6 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
determinate.url = "https://flakehub.com/f/DeterminateSystems/determinate/*";
|
|
||||||
|
|
||||||
# https://github.com/catppuccin/nix
|
# https://github.com/catppuccin/nix
|
||||||
catppuccin = {
|
catppuccin = {
|
||||||
url = "github:catppuccin/nix";
|
url = "github:catppuccin/nix";
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.2";
|
url = "github:nix-community/lanzaboote/v0.4.3";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
# anyrun - a wayland launcher
|
# anyrun - a wayland launcher
|
||||||
anyrun = {
|
anyrun = {
|
||||||
url = "github:/anyrun-org/anyrun/v25.9.0";
|
url = "github:/anyrun-org/anyrun/v25.9.3";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
ghostty = {
|
ghostty = {
|
||||||
url = "github:ghostty-org/ghostty";
|
url = "github:ghostty-org/ghostty/tip"; # Latest Continuous Release
|
||||||
};
|
};
|
||||||
|
|
||||||
blender-bin = {
|
blender-bin = {
|
||||||
@@ -138,12 +138,17 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nixos-apple-silicon = {
|
nixos-apple-silicon = {
|
||||||
# 2025-08-25 asahi-6.15.10-3
|
# asahi-6.17.7-2
|
||||||
url = "github:nix-community/nixos-apple-silicon/b99bf9bf7445416fe55da09034fc4a6cd733805c";
|
url = "github:nix-community/nixos-apple-silicon/release-2025-11-18";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
niri.url = "github:sodiboo/niri-flake";
|
helix = {
|
||||||
|
# Helix with steel as plugin system
|
||||||
|
# https://github.com/helix-editor/helix/pull/8675
|
||||||
|
url = "github:mattwparas/helix/steel-event-system";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
# -------------- Gaming ---------------------
|
# -------------- Gaming ---------------------
|
||||||
|
|
||||||
@@ -152,14 +157,14 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
aagl = {
|
aagl = {
|
||||||
url = "github:ezKEa/aagl-gtk-on-nix";
|
url = "github:ezKEa/aagl-gtk-on-nix/release-25.11";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
# inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
######################## Some non-flake repositories #########################################
|
######################## Some non-flake repositories #########################################
|
||||||
|
|
||||||
polybar-themes = {
|
nu_scripts = {
|
||||||
url = "github:adi1090x/polybar-themes";
|
url = "github:ryan4yin/nu_scripts";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-patched,
|
pkgs-master,
|
||||||
nixpak,
|
nixpak,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -22,7 +22,7 @@ in
|
|||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(_: super: {
|
(_: super: {
|
||||||
nixpaks = {
|
nixpaks = {
|
||||||
qq = wrapper pkgs-patched ./qq.nix;
|
qq = wrapper pkgs-master ./qq.nix;
|
||||||
wechat = wrapper super ./wechat.nix;
|
wechat = wrapper super ./wechat.nix;
|
||||||
telegram-desktop = wrapper super ./telegram-desktop.nix;
|
telegram-desktop = wrapper super ./telegram-desktop.nix;
|
||||||
firefox = wrapper super ./firefox.nix;
|
firefox = wrapper super ./firefox.nix;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
|
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
firefox-wayland,
|
firefox,
|
||||||
mkNixPak,
|
mkNixPak,
|
||||||
buildEnv,
|
buildEnv,
|
||||||
makeDesktopItem,
|
makeDesktopItem,
|
||||||
@@ -23,7 +23,7 @@ let
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
app = {
|
app = {
|
||||||
package = firefox-wayland;
|
package = firefox;
|
||||||
binPath = "bin/firefox";
|
binPath = "bin/firefox";
|
||||||
};
|
};
|
||||||
flatpak.appId = appId;
|
flatpak.appId = appId;
|
||||||
@@ -34,20 +34,6 @@ let
|
|||||||
./modules/common.nix
|
./modules/common.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# list all dbus services:
|
|
||||||
# ls -al /run/current-system/sw/share/dbus-1/services/
|
|
||||||
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
|
||||||
dbus.policies = {
|
|
||||||
"org.mozilla.firefox.*" = "own"; # firefox
|
|
||||||
"org.mozilla.firefox_beta.*" = "own"; # firefox beta
|
|
||||||
"org.mpris.MediaPlayer2.firefox.*" = "own";
|
|
||||||
|
|
||||||
"org.gnome.Shell.Screencast" = "talk";
|
|
||||||
# System tray icon
|
|
||||||
"org.freedesktop.Notifications" = "talk";
|
|
||||||
"org.kde.StatusNotifierWatcher" = "talk";
|
|
||||||
};
|
|
||||||
|
|
||||||
bubblewrap = {
|
bubblewrap = {
|
||||||
# To trace all the home files Firefox accesses, you can use the following nushell command:
|
# To trace all the home files Firefox accesses, you can use the following nushell command:
|
||||||
# just trace-access firefox
|
# just trace-access firefox
|
||||||
@@ -61,6 +47,7 @@ let
|
|||||||
sloth.xdgDownloadDir
|
sloth.xdgDownloadDir
|
||||||
sloth.xdgMusicDir
|
sloth.xdgMusicDir
|
||||||
sloth.xdgVideosDir
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
];
|
];
|
||||||
bind.ro = [
|
bind.ro = [
|
||||||
"/sys/bus/pci"
|
"/sys/bus/pci"
|
||||||
|
|||||||
@@ -1,32 +1,35 @@
|
|||||||
|
# https://github.com/mnixry/nixos-config/blob/74913c2b90d06e31170bbbaa0074f915721da224/desktop/packages/nixpaks-common.nix
|
||||||
|
# https://github.com/Kraftland/portable/blob/09c4a4227538a3f42de208a6ecbdc938ac9c00dd/portable.sh
|
||||||
|
# https://flatpak.github.io/xdg-desktop-portal/docs/api-reference.html
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
|
||||||
sloth,
|
sloth,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
|
||||||
config = {
|
|
||||||
dbus =
|
|
||||||
let
|
let
|
||||||
inherit (config.flatpak) appId;
|
inherit (config.flatpak) appId;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
config = {
|
||||||
|
# list all dbus services:
|
||||||
|
# ls -al /run/current-system/sw/share/dbus-1/services/
|
||||||
|
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
||||||
|
dbus = {
|
||||||
|
# `--see`: The bus name can be enumerated by the application.
|
||||||
|
# `--talk`: The application can send messages to, and receive replies and signals from, the bus name.
|
||||||
|
# `--own`: The application can own the bus name
|
||||||
policies = {
|
policies = {
|
||||||
"${appId}" = "own";
|
"${appId}" = "own";
|
||||||
"${appId}.*" = "own";
|
"${appId}.*" = "own";
|
||||||
"org.freedesktop.DBus" = "talk";
|
"org.freedesktop.DBus" = "talk";
|
||||||
"org.gtk.vfs.*" = "talk";
|
|
||||||
"org.gtk.vfs" = "talk";
|
|
||||||
"ca.desrt.dconf" = "talk";
|
"ca.desrt.dconf" = "talk";
|
||||||
"org.freedesktop.portal.*" = "talk";
|
|
||||||
"org.a11y.Bus" = "talk";
|
|
||||||
"org.freedesktop.appearance" = "talk";
|
"org.freedesktop.appearance" = "talk";
|
||||||
"org.freedesktop.appearance.*" = "talk";
|
"org.freedesktop.appearance.*" = "talk";
|
||||||
}
|
}
|
||||||
// (builtins.listToAttrs (
|
// (builtins.listToAttrs (
|
||||||
map (id: lib.nameValuePair "org.kde.StatusNotifierItem-${toString id}-1" "own") (
|
map (id: lib.nameValuePair "org.kde.StatusNotifierItem-${toString id}-1" "own") (
|
||||||
lib.lists.range 2 11
|
lib.lists.range 2 29
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
// {
|
// {
|
||||||
@@ -36,19 +39,19 @@
|
|||||||
"org.mpris.MediaPlayer2.${appId}.*" = "own";
|
"org.mpris.MediaPlayer2.${appId}.*" = "own";
|
||||||
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}" = "own";
|
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}" = "own";
|
||||||
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}.*" = "own";
|
"org.mpris.MediaPlayer2.${lib.lists.last (lib.strings.splitString "." appId)}.*" = "own";
|
||||||
# Conditionally allows a custom, friendlier MPRIS name if 'mprisName' is set.
|
|
||||||
# "org.mpris.MediaPlayer2.${mprisName}" = "own";
|
|
||||||
# "org.mpris.MediaPlayer2.${mprisName}.*" = "own";
|
|
||||||
|
|
||||||
# --- General Desktop Integration ---
|
# --- General Desktop Integration ---
|
||||||
"com.canonical.AppMenu.Registrar" = "talk"; # For Ubuntu AppMenu
|
"com.canonical.AppMenu.Registrar" = "talk"; # For Ubuntu AppMenu
|
||||||
"org.freedesktop.FileManager1" = "talk";
|
"org.freedesktop.FileManager1" = "talk";
|
||||||
"org.freedesktop.Notifications" = "talk";
|
"org.freedesktop.Notifications" = "talk";
|
||||||
|
"org.kde.StatusNotifierWatcher" = "talk";
|
||||||
|
"org.gnome.Shell.Screencast" = "talk";
|
||||||
|
|
||||||
# --- Accessibility (a11y) ---
|
# --- Accessibility (a11y) 无障碍服务 ---
|
||||||
"org.a11y.Bus" = "see";
|
"org.a11y.Bus" = "see";
|
||||||
|
|
||||||
# --- Portal Access ---
|
# --- Portal Access ---
|
||||||
|
# "org.freedesktop.portal.*" = "talk";
|
||||||
"org.freedesktop.portal.Documents" = "talk";
|
"org.freedesktop.portal.Documents" = "talk";
|
||||||
"org.freedesktop.portal.FileTransfer" = "talk";
|
"org.freedesktop.portal.FileTransfer" = "talk";
|
||||||
"org.freedesktop.portal.FileTransfer.*" = "talk";
|
"org.freedesktop.portal.FileTransfer.*" = "talk";
|
||||||
@@ -65,10 +68,9 @@
|
|||||||
"org.freedesktop.portal.IBus" = "talk";
|
"org.freedesktop.portal.IBus" = "talk";
|
||||||
"org.freedesktop.portal.IBus.*" = "talk";
|
"org.freedesktop.portal.IBus.*" = "talk";
|
||||||
};
|
};
|
||||||
rules = {
|
# '--call' rules permit specific method calls on D-Bus interfaces.
|
||||||
# 'call' rules permit specific method calls on D-Bus interfaces.
|
rules.call = {
|
||||||
call = {
|
# --- Accessibility (a11y) 无障碍服务 ---
|
||||||
# --- Accessibility ---
|
|
||||||
"org.a11y.Bus" = [
|
"org.a11y.Bus" = [
|
||||||
"org.a11y.Bus.GetAddress@/org/a11y/bus"
|
"org.a11y.Bus.GetAddress@/org/a11y/bus"
|
||||||
"org.freedesktop.DBus.Properties.Get@/org/a11y/bus"
|
"org.freedesktop.DBus.Properties.Get@/org/a11y/bus"
|
||||||
@@ -94,13 +96,37 @@
|
|||||||
# --- Main Desktop Portal Interface ---
|
# --- Main Desktop Portal Interface ---
|
||||||
# A comprehensive list of permissions for interacting with the desktop environment.
|
# A comprehensive list of permissions for interacting with the desktop environment.
|
||||||
"org.freedesktop.portal.Desktop" = [
|
"org.freedesktop.portal.Desktop" = [
|
||||||
# Device Access
|
# Properties & Settings
|
||||||
|
"org.freedesktop.DBus.Properties.GetAll"
|
||||||
|
"org.freedesktop.DBus.Properties.Get@/org/freedesktop/portal/desktop"
|
||||||
|
"org.freedesktop.portal.Session.Close"
|
||||||
|
"org.freedesktop.portal.Settings.ReadAll"
|
||||||
|
"org.freedesktop.portal.Settings.Read"
|
||||||
|
"org.freedesktop.portal.Account.GetUserInformation"
|
||||||
|
|
||||||
|
# Network & Proxy
|
||||||
|
"org.freedesktop.portal.NetworkMonitor"
|
||||||
|
"org.freedesktop.portal.NetworkMonitor.*"
|
||||||
|
"org.freedesktop.portal.ProxyResolver.Lookup"
|
||||||
|
"org.freedesktop.portal.ProxyResolver.Lookup.*"
|
||||||
|
|
||||||
|
# Screenshot / Screen Capture & Sharing
|
||||||
|
"org.freedesktop.portal.ScreenCast"
|
||||||
|
"org.freedesktop.portal.ScreenCast.*"
|
||||||
|
"org.freedesktop.portal.Screenshot"
|
||||||
|
"org.freedesktop.portal.Screenshot.Screenshot"
|
||||||
|
|
||||||
|
# Device Access(Camera / USB)
|
||||||
"org.freedesktop.portal.Camera"
|
"org.freedesktop.portal.Camera"
|
||||||
"org.freedesktop.portal.Camera.*"
|
"org.freedesktop.portal.Camera.*"
|
||||||
"org.freedesktop.portal.Usb"
|
"org.freedesktop.portal.Usb"
|
||||||
"org.freedesktop.portal.Usb.*"
|
"org.freedesktop.portal.Usb.*"
|
||||||
|
|
||||||
# File Chooser & Documents
|
# Remote Desktop
|
||||||
|
"org.freedesktop.portal.RemoteDesktop"
|
||||||
|
"org.freedesktop.portal.RemoteDesktop.*"
|
||||||
|
|
||||||
|
# File Operations
|
||||||
"org.freedesktop.portal.Documents"
|
"org.freedesktop.portal.Documents"
|
||||||
"org.freedesktop.portal.Documents.*"
|
"org.freedesktop.portal.Documents.*"
|
||||||
"org.freedesktop.portal.FileChooser"
|
"org.freedesktop.portal.FileChooser"
|
||||||
@@ -108,12 +134,6 @@
|
|||||||
"org.freedesktop.portal.FileTransfer"
|
"org.freedesktop.portal.FileTransfer"
|
||||||
"org.freedesktop.portal.FileTransfer.*"
|
"org.freedesktop.portal.FileTransfer.*"
|
||||||
|
|
||||||
# Input Methods
|
|
||||||
"org.freedesktop.portal.Fcitx"
|
|
||||||
"org.freedesktop.portal.Fcitx.*"
|
|
||||||
"org.freedesktop.portal.IBus"
|
|
||||||
"org.freedesktop.portal.IBus.*"
|
|
||||||
|
|
||||||
# Notifications & Printing
|
# Notifications & Printing
|
||||||
"org.freedesktop.portal.Notification"
|
"org.freedesktop.portal.Notification"
|
||||||
"org.freedesktop.portal.Notification.*"
|
"org.freedesktop.portal.Notification.*"
|
||||||
@@ -121,63 +141,41 @@
|
|||||||
"org.freedesktop.portal.Print.*"
|
"org.freedesktop.portal.Print.*"
|
||||||
|
|
||||||
# Open/Launch Handlers
|
# Open/Launch Handlers
|
||||||
"org.freedesktop.portal.Email.ComposeEmail"
|
|
||||||
"org.freedesktop.portal.OpenURI"
|
"org.freedesktop.portal.OpenURI"
|
||||||
"org.freedesktop.portal.OpenURI.*"
|
"org.freedesktop.portal.OpenURI.*"
|
||||||
|
"org.freedesktop.portal.Email.ComposeEmail"
|
||||||
|
|
||||||
# Properties & Session Management
|
# Input Methods
|
||||||
"org.freedesktop.DBus.Properties.GetAll"
|
"org.freedesktop.portal.Fcitx"
|
||||||
"org.freedesktop.DBus.Properties.Get@/org/freedesktop/portal/desktop"
|
"org.freedesktop.portal.Fcitx.*"
|
||||||
"org.freedesktop.portal.Session.Close"
|
"org.freedesktop.portal.IBus"
|
||||||
|
"org.freedesktop.portal.IBus.*"
|
||||||
# Screen Capture & Sharing
|
|
||||||
"org.freedesktop.portal.RemoteDesktop"
|
|
||||||
"org.freedesktop.portal.RemoteDesktop.*"
|
|
||||||
"org.freedesktop.portal.ScreenCast"
|
|
||||||
"org.freedesktop.portal.ScreenCast.*"
|
|
||||||
"org.freedesktop.portal.Screenshot"
|
|
||||||
"org.freedesktop.portal.Screenshot.Screenshot"
|
|
||||||
|
|
||||||
# Secrets (Keyring)
|
# Secrets (Keyring)
|
||||||
"org.freedesktop.portal.Secret"
|
"org.freedesktop.portal.Secret"
|
||||||
"org.freedesktop.portal.Secret.RetrieveSecret"
|
"org.freedesktop.portal.Secret.RetrieveSecret"
|
||||||
|
|
||||||
# Settings
|
# Get/Update GlobalShortcuts
|
||||||
"org.freedesktop.portal.Settings.Read"
|
# "org.freedesktop.portal.GlobalShortcuts"
|
||||||
"org.freedesktop.portal.Settings.ReadAll"
|
# "org.freedesktop.portal.GlobalShortcuts.*"
|
||||||
|
|
||||||
# System Information
|
# -- get the user's location
|
||||||
"org.freedesktop.portal.Account.GetUserInformation"
|
# "org.freedesktop.portal.Location"
|
||||||
"org.freedesktop.portal.NetworkMonitor"
|
# "org.freedesktop.portal.Location.*"
|
||||||
"org.freedesktop.portal.NetworkMonitor.*"
|
|
||||||
"org.freedesktop.portal.ProxyResolver.Lookup"
|
|
||||||
"org.freedesktop.portal.ProxyResolver.Lookup.*"
|
|
||||||
|
|
||||||
# Generic Request Fallback
|
# -- inhibit the user session from ending, suspending, idling or getting switched away.
|
||||||
"org.freedesktop.portal.Request"
|
|
||||||
|
|
||||||
# --- Conditional Portal Rules ---
|
|
||||||
# These would be enabled based on config flags in a real implementation.
|
|
||||||
|
|
||||||
# Enabled if 'allowGlobalShortcuts = true'
|
|
||||||
"org.freedesktop.portal.GlobalShortcuts"
|
|
||||||
"org.freedesktop.portal.GlobalShortcuts.*"
|
|
||||||
|
|
||||||
# Enabled if 'allowInhibit = true'
|
|
||||||
"org.freedesktop.portal.Inhibit"
|
"org.freedesktop.portal.Inhibit"
|
||||||
"org.freedesktop.portal.Inhibit.*"
|
"org.freedesktop.portal.Inhibit.*"
|
||||||
|
|
||||||
# Enabled if 'XDG_CURRENT_DESKTOP = "GNOME"'
|
# Generic Request Fallback
|
||||||
"org.freedesktop.portal.Location"
|
"org.freedesktop.portal.Request"
|
||||||
"org.freedesktop.portal.Location.*"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# 'broadcast' rules permit receiving signals from D-Bus names.
|
# 'broadcast' rules permit receiving signals from D-Bus names.
|
||||||
broadcast = {
|
rules.broadcast = {
|
||||||
"org.freedesktop.portal.*" = [ "@/org/freedesktop/portal/*" ];
|
"org.freedesktop.portal.*" = [ "@/org/freedesktop/portal/*" ];
|
||||||
};
|
};
|
||||||
};
|
|
||||||
args = [
|
args = [
|
||||||
"--filter"
|
"--filter"
|
||||||
"--sloppy-names"
|
"--sloppy-names"
|
||||||
|
|||||||
@@ -31,19 +31,6 @@ let
|
|||||||
./modules/common.nix
|
./modules/common.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# list all dbus services:
|
|
||||||
# ls -al /run/current-system/sw/share/dbus-1/services/
|
|
||||||
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
|
||||||
dbus.policies = {
|
|
||||||
"org.gnome.Shell.Screencast" = "talk";
|
|
||||||
# System tray icon
|
|
||||||
"org.freedesktop.Notifications" = "talk";
|
|
||||||
"org.kde.StatusNotifierWatcher" = "talk";
|
|
||||||
# File Manager
|
|
||||||
"org.freedesktop.FileManager1" = "talk";
|
|
||||||
# Uses legacy StatusNotifier implementation
|
|
||||||
"org.kde.*" = "own";
|
|
||||||
};
|
|
||||||
bubblewrap = {
|
bubblewrap = {
|
||||||
# To trace all the home files QQ accesses, you can use the following nushell command:
|
# To trace all the home files QQ accesses, you can use the following nushell command:
|
||||||
# just trace-access qq
|
# just trace-access qq
|
||||||
@@ -53,6 +40,7 @@ let
|
|||||||
sloth.xdgDownloadDir
|
sloth.xdgDownloadDir
|
||||||
sloth.xdgMusicDir
|
sloth.xdgMusicDir
|
||||||
sloth.xdgVideosDir
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
];
|
];
|
||||||
sockets = {
|
sockets = {
|
||||||
x11 = false;
|
x11 = false;
|
||||||
|
|||||||
@@ -24,10 +24,6 @@ let
|
|||||||
dbus = {
|
dbus = {
|
||||||
enable = true;
|
enable = true;
|
||||||
policies = {
|
policies = {
|
||||||
"org.gnome.Mutter.IdleMonitor" = "talk";
|
|
||||||
"org.freedesktop.Notifications" = "talk";
|
|
||||||
"org.kde.StatusNotifierWatcher" = "talk";
|
|
||||||
"com.canonical.AppMenu.Registrar" = "talk";
|
|
||||||
"com.canonical.indicator.application" = "talk";
|
"com.canonical.indicator.application" = "talk";
|
||||||
"org.ayatana.indicator.application" = "talk";
|
"org.ayatana.indicator.application" = "talk";
|
||||||
"org.sigxcpu.Feedback" = "talk";
|
"org.sigxcpu.Feedback" = "talk";
|
||||||
@@ -40,6 +36,7 @@ let
|
|||||||
sloth.xdgDownloadDir
|
sloth.xdgDownloadDir
|
||||||
sloth.xdgMusicDir
|
sloth.xdgMusicDir
|
||||||
sloth.xdgVideosDir
|
sloth.xdgVideosDir
|
||||||
|
sloth.xdgPicturesDir
|
||||||
];
|
];
|
||||||
sockets = {
|
sockets = {
|
||||||
x11 = false;
|
x11 = false;
|
||||||
|
|||||||
+8
-31
@@ -1,34 +1,6 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# Misc
|
|
||||||
cowsay
|
|
||||||
gnupg
|
|
||||||
gnumake
|
|
||||||
|
|
||||||
# Modern cli tools, replacement of grep/sed/...
|
|
||||||
|
|
||||||
# Interactively filter its input using fuzzy searching, not limit to filenames.
|
|
||||||
fzf
|
|
||||||
# search for files by name, faster than find
|
|
||||||
fd
|
|
||||||
# search for files by its content, replacement of grep
|
|
||||||
(ripgrep.override { withPCRE2 = true; })
|
|
||||||
|
|
||||||
# A fast and polyglot tool for code searching, linting, rewriting at large scale
|
|
||||||
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
|
|
||||||
ast-grep
|
|
||||||
|
|
||||||
sad # CLI search and replace, just like sed, but with diff preview.
|
|
||||||
yq-go # yaml processor https://github.com/mikefarah/yq
|
|
||||||
just # a command runner like make, but simpler
|
|
||||||
hyperfine # command-line benchmarking tool
|
|
||||||
gping # ping, but with a graph(TUI)
|
|
||||||
doggo # DNS client for humans
|
|
||||||
duf # Disk Usage/Free Utility - a better 'df' alternative
|
|
||||||
du-dust # A more intuitive version of `du` in rust
|
|
||||||
gdu # disk usage analyzer(replacement of `du`)
|
|
||||||
|
|
||||||
# nix related
|
# nix related
|
||||||
#
|
#
|
||||||
# it provides the command `nom` works just like `nix
|
# it provides the command `nom` works just like `nix
|
||||||
@@ -42,10 +14,15 @@
|
|||||||
# https://github.com/utdemir/nix-tree
|
# https://github.com/utdemir/nix-tree
|
||||||
nix-tree # A TUI to visualize the dependency graph of a nix derivation
|
nix-tree # A TUI to visualize the dependency graph of a nix derivation
|
||||||
|
|
||||||
# productivity
|
# misc
|
||||||
|
cowsay
|
||||||
|
gnupg
|
||||||
caddy # A webserver with automatic HTTPS via Let's Encrypt(replacement of nginx)
|
caddy # A webserver with automatic HTTPS via Let's Encrypt(replacement of nginx)
|
||||||
croc # File transfer between computers securely and easily
|
# A fast and polyglot tool for code searching, linting, rewriting at large scale
|
||||||
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
|
# supported languages: only some mainstream languages currently(do not support nix/nginx/yaml/toml/...)
|
||||||
|
ast-grep
|
||||||
|
|
||||||
|
# other core cli tools are installed at system-level
|
||||||
];
|
];
|
||||||
|
|
||||||
# A modern replacement for ‘ls’
|
# A modern replacement for ‘ls’
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
programs.helix = {
|
programs.helix.enable = true;
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-28
@@ -40,18 +40,27 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
lfs.enable = true;
|
lfs.enable = true;
|
||||||
|
|
||||||
userName = myvars.userfullname;
|
# signing = {
|
||||||
userEmail = myvars.useremail;
|
# key = "xxx";
|
||||||
|
# signByDefault = true;
|
||||||
|
# };
|
||||||
|
|
||||||
includes = [
|
includes = [
|
||||||
{
|
{
|
||||||
# use different email & name for work
|
# use different email & name for work:
|
||||||
|
#
|
||||||
|
# [user]
|
||||||
|
# email = "xxx@xxx.com"
|
||||||
|
# name = "Ryan Yin"
|
||||||
path = "~/work/.gitconfig";
|
path = "~/work/.gitconfig";
|
||||||
condition = "gitdir:~/work/";
|
condition = "gitdir:~/work/";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
extraConfig = {
|
settings = {
|
||||||
|
user.email = myvars.useremail;
|
||||||
|
user.name = myvars.userfullname;
|
||||||
|
|
||||||
init.defaultBranch = "main";
|
init.defaultBranch = "main";
|
||||||
trim.bases = "develop,master,main"; # for git-trim
|
trim.bases = "develop,master,main"; # for git-trim
|
||||||
push.autoSetupRemote = true;
|
push.autoSetupRemote = true;
|
||||||
@@ -63,30 +72,9 @@
|
|||||||
"ssh://git@github.com/ryan4yin" = {
|
"ssh://git@github.com/ryan4yin" = {
|
||||||
insteadOf = "https://github.com/ryan4yin";
|
insteadOf = "https://github.com/ryan4yin";
|
||||||
};
|
};
|
||||||
# "ssh://git@gitlab.com/" = {
|
# "ssh://git@bitbucket.com/ryan4yin" = {
|
||||||
# insteadOf = "https://gitlab.com/";
|
# insteadOf = "https://bitbucket.com/ryan4yin";
|
||||||
# };
|
# };
|
||||||
# "ssh://git@bitbucket.com/" = {
|
|
||||||
# insteadOf = "https://bitbucket.com/";
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# signing = {
|
|
||||||
# key = "xxx";
|
|
||||||
# signByDefault = true;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# A syntax-highlighting pager for git, diff, grep, and blame output
|
|
||||||
delta = {
|
|
||||||
enable = true;
|
|
||||||
options = {
|
|
||||||
diff-so-fancy = true;
|
|
||||||
line-numbers = true;
|
|
||||||
true-color = "always";
|
|
||||||
# features => named groups of settings, used to keep related settings organized
|
|
||||||
# features = "";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
aliases = {
|
aliases = {
|
||||||
@@ -117,10 +105,24 @@
|
|||||||
foreach = "submodule foreach";
|
foreach = "submodule foreach";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# A syntax-highlighting pager for git, diff, grep, and blame output
|
||||||
|
programs.delta = {
|
||||||
|
enable = true;
|
||||||
|
enableGitIntegration = true;
|
||||||
|
options = {
|
||||||
|
diff-so-fancy = true;
|
||||||
|
line-numbers = true;
|
||||||
|
true-color = "always";
|
||||||
|
# features => named groups of settings, used to keep related settings organized
|
||||||
|
# features = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Git terminal UI (written in go).
|
# Git terminal UI (written in go).
|
||||||
programs.lazygit.enable = true;
|
programs.lazygit.enable = true;
|
||||||
|
|
||||||
# Yet another Git TUI (written in rust).
|
# Yet another Git TUI (written in rust).
|
||||||
programs.gitui.enable = true;
|
programs.gitui.enable = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ in
|
|||||||
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
|
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
|
||||||
programs.nushell = {
|
programs.nushell = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs-unstable.nushell;
|
|
||||||
configFile.source = ./config.nu;
|
configFile.source = ./config.nu;
|
||||||
inherit shellAliases;
|
inherit shellAliases;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Error opening terminal: xterm-kitty.
|
|||||||
|
|
||||||
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
||||||
group:
|
group:
|
||||||
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix#L18)
|
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/config/terminfo.nix#L18)
|
||||||
|
|
||||||
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###########################################################
|
###########################################################
|
||||||
@@ -26,7 +25,6 @@
|
|||||||
{
|
{
|
||||||
programs.alacritty = {
|
programs.alacritty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs-unstable.alacritty;
|
|
||||||
# https://alacritty.org/config-alacritty.html
|
# https://alacritty.org/config-alacritty.html
|
||||||
settings = {
|
settings = {
|
||||||
window = {
|
window = {
|
||||||
@@ -52,7 +50,7 @@
|
|||||||
bold_italic = {
|
bold_italic = {
|
||||||
family = "Maple Mono NF CN";
|
family = "Maple Mono NF CN";
|
||||||
};
|
};
|
||||||
size = if pkgs.stdenv.isDarwin then 14 else 13;
|
size = 13;
|
||||||
};
|
};
|
||||||
terminal = {
|
terminal = {
|
||||||
# Spawn a nushell in login mode via `bash`
|
# Spawn a nushell in login mode via `bash`
|
||||||
|
|||||||
@@ -17,8 +17,9 @@
|
|||||||
settings = {
|
settings = {
|
||||||
main = {
|
main = {
|
||||||
term = "foot"; # or "xterm-256color" for maximum compatibility
|
term = "foot"; # or "xterm-256color" for maximum compatibility
|
||||||
font = "Maple Mono NF CN:size=14";
|
font = "Maple Mono NF CN:size=13";
|
||||||
dpi-aware = "no"; # scale via window manager instead
|
dpi-aware = "no"; # scale via window manager instead
|
||||||
|
resize-keep-grid = "no"; # do not resize the window on font resizing
|
||||||
|
|
||||||
# Spawn a nushell in login mode via `bash`
|
# Spawn a nushell in login mode via `bash`
|
||||||
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
pkgs.hello # pkgs.ghostty is currently broken on darwin
|
||||||
else
|
else
|
||||||
pkgs.ghostty; # the stable version
|
pkgs.ghostty; # the stable version
|
||||||
# package = ghostty.packages.${pkgs.system}.default; # the latest version
|
# package = ghostty.packages.${pkgs.stdenv.hostPlatform.system}.default; # the latest version
|
||||||
enableBashIntegration = false;
|
enableBashIntegration = false;
|
||||||
installBatSyntax = false;
|
installBatSyntax = false;
|
||||||
# installVimSyntax = true;
|
# installVimSyntax = true;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
font = {
|
font = {
|
||||||
name = "Maple Mono NF CN";
|
name = "Maple Mono NF CN";
|
||||||
# use different font size on macOS
|
# use different font size on macOS
|
||||||
size = if pkgs.stdenv.isDarwin then 14 else 13;
|
size = 13;
|
||||||
};
|
};
|
||||||
|
|
||||||
# consistent with other terminal emulators
|
# consistent with other terminal emulators
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-stable,
|
pkgs-2505,
|
||||||
nur-ryan4yin,
|
nur-ryan4yin,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
istioctl
|
istioctl
|
||||||
clusterctl # for kubernetes cluster-api
|
clusterctl # for kubernetes cluster-api
|
||||||
kubevirt # virtctl
|
kubevirt # virtctl
|
||||||
pkgs-stable.kubernetes-helm
|
pkgs-2505.kubernetes-helm
|
||||||
fluxcd
|
fluxcd
|
||||||
argocd
|
argocd
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,29 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
helix,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
helixPackages = helix.packages.${pkgs.stdenv.hostPlatform.system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# to make steel work, we need to git clone this repo to your home directory.
|
||||||
|
home.sessionVariables.HELIX_STEEL_CONFIG = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/helix/steel";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
steel
|
||||||
|
];
|
||||||
|
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.helix;
|
# enable steel as the plugin system
|
||||||
|
# https://github.com/helix-editor/helix/pull/8675
|
||||||
|
# https://github.com/mattwparas/helix/blob/steel-event-system/STEEL.md
|
||||||
|
package = helixPackages.default.overrideAttrs (prevAttrs: {
|
||||||
|
cargoBuildFeatures = prevAttrs.cargoBuildFeatures or [ ] ++ [ "steel" ];
|
||||||
|
});
|
||||||
settings = {
|
settings = {
|
||||||
editor = {
|
editor = {
|
||||||
line-number = "relative";
|
line-number = "relative";
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
;; The helix.scm module will be loaded first before anything else,
|
||||||
|
;; the runtime will require this module, and any functions exported
|
||||||
|
;; will now be available to be used as typed commands, e.g. :git-add :open-helix-scm
|
||||||
|
|
||||||
|
(require "helix/editor.scm")
|
||||||
|
(require (prefix-in helix. "helix/commands.scm"))
|
||||||
|
(require (prefix-in helix.static. "helix/static.scm"))
|
||||||
|
|
||||||
|
(provide shell git-add open-helix-scm open-init-scm)
|
||||||
|
|
||||||
|
(define (current-path)
|
||||||
|
(let* ([focus (editor-focus)]
|
||||||
|
[focus-doc-id (editor->doc-id focus)])
|
||||||
|
(editor-document->path focus-doc-id)))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Specialized shell implementation, where % is a wildcard for the current file
|
||||||
|
(define (shell . args)
|
||||||
|
(helix.run-shell-command
|
||||||
|
(string-join
|
||||||
|
;; Replace the % with the current file
|
||||||
|
(map (lambda (x) (if (equal? x "%") (current-path) x)) args)
|
||||||
|
" ")))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Adds the current file to git
|
||||||
|
(define (git-add)
|
||||||
|
(shell "git" "add" "%"))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Open the helix.scm file
|
||||||
|
(define (open-helix-scm)
|
||||||
|
(helix.open (helix.static.get-helix-scm-path)))
|
||||||
|
|
||||||
|
;;@doc
|
||||||
|
;; Opens the init.scm file
|
||||||
|
(define (open-init-scm)
|
||||||
|
(helix.open (helix.static.get-init-scm-path)))
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
;; The init.scm file is run at the top level, immediately after the helix.scm module is required.
|
||||||
|
;; The helix context is available here, so you can interact with the editor.
|
||||||
|
|
||||||
|
;; configure the LSP for steel
|
||||||
|
(require "helix/configuration.scm")
|
||||||
|
(define-lsp "steel-language-server" (command "steel-language-server") (args '()))
|
||||||
|
(define-language "scheme"
|
||||||
|
(language-servers '("steel-language-server")))
|
||||||
|
|
||||||
|
;; show splash screen - when you open with no argument
|
||||||
|
(require "mattwparas-helix-package/splash.scm")
|
||||||
|
(when (equal? (command-line) '("hx"))
|
||||||
|
(show-splash))
|
||||||
|
|
||||||
|
;; Terminal & shell
|
||||||
|
(require "steel-pty/term.scm")
|
||||||
|
(set-default-shell! "nu")
|
||||||
|
|
||||||
|
;; File Watcher
|
||||||
|
(require "helix-file-watcher/file-watcher.scm")
|
||||||
|
(spawn-watcher)
|
||||||
|
|
||||||
|
;; File Tree
|
||||||
|
(require "mattwparas-helix-package/cogs/file-tree.scm")
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -29,7 +28,7 @@ in
|
|||||||
|
|
||||||
programs.neovim = {
|
programs.neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.neovim-unwrapped;
|
package = pkgs.neovim-unwrapped;
|
||||||
|
|
||||||
# defaultEditor = true; # set EDITOR at system-wide level
|
# defaultEditor = true; # set EDITOR at system-wide level
|
||||||
viAlias = true;
|
viAlias = true;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-master,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
marksman # language server for markdown
|
marksman # language server for markdown
|
||||||
glow # markdown previewer
|
glow # markdown previewer
|
||||||
pandoc # document converter
|
pandoc # document converter
|
||||||
pkgs-unstable.hugo # static site generator
|
pkgs-master.hugo # static site generator
|
||||||
|
|
||||||
#-- sql
|
#-- sql
|
||||||
sqlfluff
|
sqlfluff
|
||||||
@@ -90,11 +90,11 @@
|
|||||||
|
|
||||||
#-- rust
|
#-- rust
|
||||||
# we'd better use the rust-overlays for rust development
|
# we'd better use the rust-overlays for rust development
|
||||||
pkgs-unstable.rustc
|
pkgs-master.rustc
|
||||||
pkgs-unstable.rust-analyzer
|
pkgs-master.rust-analyzer
|
||||||
pkgs-unstable.cargo # rust package manager
|
pkgs-master.cargo # rust package manager
|
||||||
pkgs-unstable.rustfmt
|
pkgs-master.rustfmt
|
||||||
pkgs-unstable.clippy # rust linter
|
pkgs-master.clippy # rust linter
|
||||||
|
|
||||||
#-- golang
|
#-- golang
|
||||||
go
|
go
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
# fnlfmt # fennel
|
# fnlfmt # fennel
|
||||||
# (
|
# (
|
||||||
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
|
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
|
||||||
# then pkgs-unstable.akkuPackages.scheme-langserver
|
# then pkgs-master.akkuPackages.scheme-langserver
|
||||||
# else pkgs.emptyDirectory
|
# else pkgs.emptyDirectory
|
||||||
# )
|
# )
|
||||||
# ]
|
# ]
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs-unstable,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
inherit (pkgs-unstable) nu_scripts;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
programs.nushell = {
|
|
||||||
# load the alias file for work
|
|
||||||
# the file must exist, otherwise nushell will complain about it!
|
|
||||||
#
|
|
||||||
# currently, nushell does not support conditional sourcing of files
|
|
||||||
# https://github.com/nushell/nushell/issues/8214
|
|
||||||
extraConfig = ''
|
|
||||||
source /etc/agenix/alias-for-work.nushell
|
|
||||||
|
|
||||||
# using claude-code with kimi k2
|
|
||||||
$env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
|
||||||
$env.ANTHROPIC_API_KEY = $env.MOONSHOT_API_KEY
|
|
||||||
|
|
||||||
# Directories in this constant are searched by the
|
|
||||||
# `use` and `source` commands.
|
|
||||||
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}/share/nu_scripts']
|
|
||||||
|
|
||||||
# completion
|
|
||||||
use custom-completions/cargo/cargo-completions.nu *
|
|
||||||
use custom-completions/curl/curl-completions.nu *
|
|
||||||
use custom-completions/git/git-completions.nu *
|
|
||||||
use custom-completions/glow/glow-completions.nu *
|
|
||||||
use custom-completions/just/just-completions.nu *
|
|
||||||
use custom-completions/make/make-completions.nu *
|
|
||||||
use custom-completions/man/man-completions.nu *
|
|
||||||
use custom-completions/nix/nix-completions.nu *
|
|
||||||
use custom-completions/ssh/ssh-completions.nu *
|
|
||||||
use custom-completions/tar/tar-completions.nu *
|
|
||||||
use custom-completions/tcpdump/tcpdump-completions.nu *
|
|
||||||
use custom-completions/zellij/zellij-completions.nu *
|
|
||||||
# use custom-completions/zoxide/zoxide-completions.nu *
|
|
||||||
|
|
||||||
# alias
|
|
||||||
# use aliases/git/git-aliases.nu *
|
|
||||||
use aliases/eza/eza-aliases.nu *
|
|
||||||
use aliases/bat/bat-aliases.nu *
|
|
||||||
|
|
||||||
# modules
|
|
||||||
use modules/argx *
|
|
||||||
use modules/lg *
|
|
||||||
use modules/kubernetes *
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# Google Cloud CLI aliases
|
||||||
|
# Based on https://cloud.google.com/sdk/docs/configurations
|
||||||
|
# Note: Avoided conflicts with common git aliases (gc, gca, gcl, gcs, gcu, gs, etc.)
|
||||||
|
|
||||||
|
# Configuration management
|
||||||
|
export alias gccfg = gcloud config configurations create
|
||||||
|
export alias gcact = gcloud config configurations activate
|
||||||
|
export alias gclist = gcloud config configurations list
|
||||||
|
export alias gcdel = gcloud config configurations delete
|
||||||
|
export alias gcset = gcloud config set
|
||||||
|
export alias gcunset = gcloud config unset
|
||||||
|
export alias gcconfig = gcloud config list
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
export alias gclogin = gcloud auth login
|
||||||
|
export alias gcauth = gcloud auth list
|
||||||
|
export alias gcapp = gcloud auth application-default login
|
||||||
|
|
||||||
|
# Project management
|
||||||
|
export alias gcproj = gcloud config set project
|
||||||
|
export alias gcget = gcloud config get-value project
|
||||||
|
|
||||||
|
# Compute Engine
|
||||||
|
export alias gcinst = gcloud compute instances list
|
||||||
|
export alias gccreate = gcloud compute instances create
|
||||||
|
export alias gcdelete = gcloud compute instances delete
|
||||||
|
export alias gcssh = gcloud compute ssh
|
||||||
|
export alias gck8sget = gcloud container clusters get-credentials
|
||||||
|
|
||||||
|
# Storage
|
||||||
|
export alias gcst = gcloud storage
|
||||||
|
export alias gcstls = gcloud storage ls
|
||||||
|
export alias gcstcp = gcloud storage cp
|
||||||
|
export alias gcstrm = gcloud storage rm
|
||||||
|
|
||||||
|
# General shortcuts
|
||||||
|
export alias gcloud = gcloud
|
||||||
|
export alias gcinfo = gcloud info
|
||||||
|
export alias gcver = gcloud version
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
nu_scripts,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.nushell = {
|
||||||
|
# load the alias file for work
|
||||||
|
# the file must exist, otherwise nushell will complain about it!
|
||||||
|
#
|
||||||
|
# currently, nushell does not support conditional sourcing of files
|
||||||
|
# https://github.com/nushell/nushell/issues/8214
|
||||||
|
extraConfig = ''
|
||||||
|
source /etc/agenix/alias-for-work.nushell
|
||||||
|
|
||||||
|
$env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
|
||||||
|
# using claude-code with kimi k2
|
||||||
|
# https://platform.moonshot.cn/docs/guide/agent-support
|
||||||
|
# $env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
|
||||||
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.MOONSHOT_API_KEY
|
||||||
|
# $env.ANTHROPIC_MODEL = "kimi-k2-thinking"
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "kimi-k2-thinking-turbo"
|
||||||
|
|
||||||
|
# using claude-code with glm llm
|
||||||
|
# https://docs.bigmodel.cn/cn/coding-plan/tool/claude
|
||||||
|
$env.ANTHROPIC_BASE_URL = "https://open.bigmodel.cn/api/anthropic"
|
||||||
|
$env.ANTHROPIC_AUTH_TOKEN = $env.ZAI_API_KEY
|
||||||
|
$env.ANTHROPIC_MODEL = "glm-4.6"
|
||||||
|
$env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "glm-4.5-air"
|
||||||
|
|
||||||
|
# using claude-code with qwen llm
|
||||||
|
# https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=2949529
|
||||||
|
# $env.ANTHROPIC_BASE_URL = "https://dashscope.aliyuncs.com/apps/anthropic"
|
||||||
|
# $env.ANTHROPIC_AUTH_TOKEN = $env.DASHSCOPE_API_KEY
|
||||||
|
# $env.ANTHROPIC_MODEL = "qwen-plus" # 千万别用 qwen-max, 价格
|
||||||
|
# $env.ANTHROPIC_DEFAULT_HAIKU_MODEL = "qwen-turbo"
|
||||||
|
|
||||||
|
# Directories in this constant are searched by the
|
||||||
|
# `use` and `source` commands.
|
||||||
|
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}']
|
||||||
|
|
||||||
|
# -*- completion -*-
|
||||||
|
use custom-completions/cargo/cargo-completions.nu *
|
||||||
|
use custom-completions/curl/curl-completions.nu *
|
||||||
|
use custom-completions/git/git-completions.nu *
|
||||||
|
use custom-completions/glow/glow-completions.nu *
|
||||||
|
use custom-completions/just/just-completions.nu *
|
||||||
|
use custom-completions/make/make-completions.nu *
|
||||||
|
use custom-completions/man/man-completions.nu *
|
||||||
|
use custom-completions/nix/nix-completions.nu *
|
||||||
|
use custom-completions/ssh/ssh-completions.nu *
|
||||||
|
use custom-completions/tar/tar-completions.nu *
|
||||||
|
use custom-completions/tcpdump/tcpdump-completions.nu *
|
||||||
|
use custom-completions/zellij/zellij-completions.nu *
|
||||||
|
use custom-completions/zoxide/zoxide-completions.nu *
|
||||||
|
|
||||||
|
# -*- alias -*-
|
||||||
|
use aliases/git/git-aliases.nu *
|
||||||
|
use aliases/eza/eza-aliases.nu *
|
||||||
|
use aliases/bat/bat-aliases.nu *
|
||||||
|
use ${./aliases/gcloud.nu} *
|
||||||
|
|
||||||
|
# -*- modules -*-
|
||||||
|
# argx & lg is required by the kubernetes module
|
||||||
|
use modules/argx *
|
||||||
|
use modules/lg *
|
||||||
|
# k8s/helm aliases, completions,
|
||||||
|
use modules/kubernetes *
|
||||||
|
# a wrapper around the jc cli tool, convert cli outputs to nushell tables
|
||||||
|
# use modules/jc
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -130,8 +130,8 @@ alt-3 = 'workspace 3Work'
|
|||||||
alt-4 = 'workspace 4Firefox'
|
alt-4 = 'workspace 4Firefox'
|
||||||
alt-5 = 'workspace 5Chrome'
|
alt-5 = 'workspace 5Chrome'
|
||||||
alt-6 = 'workspace 6Chat'
|
alt-6 = 'workspace 6Chat'
|
||||||
alt-7 = 'workspace 7Music'
|
alt-7 = 'workspace 7Work'
|
||||||
alt-8 = 'workspace 8Mail'
|
alt-8 = 'workspace 8Music'
|
||||||
alt-9 = 'workspace 9File'
|
alt-9 = 'workspace 9File'
|
||||||
alt-0 = 'workspace 0Other'
|
alt-0 = 'workspace 0Other'
|
||||||
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
|
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
|
||||||
@@ -146,8 +146,8 @@ alt-shift-3 = 'move-node-to-workspace 3Work'
|
|||||||
alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
||||||
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
||||||
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
||||||
alt-shift-7 = 'move-node-to-workspace 7Music'
|
alt-shift-7 = 'move-node-to-workspace 7Work'
|
||||||
alt-shift-8 = 'move-node-to-workspace 8Mail'
|
alt-shift-8 = 'move-node-to-workspace 8Music'
|
||||||
alt-shift-9 = 'move-node-to-workspace 9File'
|
alt-shift-9 = 'move-node-to-workspace 9File'
|
||||||
alt-shift-0 = 'move-node-to-workspace 0Other'
|
alt-shift-0 = 'move-node-to-workspace 0Other'
|
||||||
alt-shift-a = 'move-node-to-workspace A'
|
alt-shift-a = 'move-node-to-workspace A'
|
||||||
@@ -246,22 +246,22 @@ run = 'move-node-to-workspace 6Chat'
|
|||||||
if.app-id = 'com.tencent.qq'
|
if.app-id = 'com.tencent.qq'
|
||||||
run = 'move-node-to-workspace 6Chat'
|
run = 'move-node-to-workspace 6Chat'
|
||||||
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'com.tencent.QQMusicMac'
|
|
||||||
run = 'move-node-to-workspace 7Music'
|
|
||||||
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'com.netease.163music'
|
|
||||||
run = 'move-node-to-workspace 7Music'
|
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.mail'
|
if.app-id = 'com.apple.mail'
|
||||||
run = 'move-node-to-workspace 8Mail'
|
run = 'move-node-to-workspace 7Work'
|
||||||
|
|
||||||
# calendar
|
# calendar
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.iCal'
|
if.app-id = 'com.apple.iCal'
|
||||||
run = 'move-node-to-workspace 8Mail'
|
run = 'move-node-to-workspace 7Work'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.QQMusicMac'
|
||||||
|
run = 'move-node-to-workspace 8Music'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.netease.163music'
|
||||||
|
run = 'move-node-to-workspace 8Music'
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'com.apple.finder'
|
if.app-id = 'com.apple.finder'
|
||||||
@@ -296,6 +296,11 @@ run = ['layout floating', 'move-node-to-workspace 0Other']
|
|||||||
if.app-id = 'ai.elementlabs.lmstudio'
|
if.app-id = 'ai.elementlabs.lmstudio'
|
||||||
run = ['layout floating', 'move-node-to-workspace 0Other']
|
run = ['layout floating', 'move-node-to-workspace 0Other']
|
||||||
|
|
||||||
|
# Clash Verge - has problem with floating
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
|
||||||
|
run = ['move-node-to-workspace 0Other']
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'us.zoom.xos'
|
if.app-id = 'us.zoom.xos'
|
||||||
run = 'move-node-to-workspace 0Other'
|
run = 'move-node-to-workspace 0Other'
|
||||||
@@ -310,11 +315,6 @@ run = ['layout floating']
|
|||||||
if.app-id = 'com.apple.systempreferences'
|
if.app-id = 'com.apple.systempreferences'
|
||||||
run = ['layout floating']
|
run = ['layout floating']
|
||||||
|
|
||||||
# Clash Verge - has problem with floating
|
|
||||||
[[on-window-detected]]
|
|
||||||
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
|
|
||||||
run = ['move-node-to-workspace 0Other']
|
|
||||||
|
|
||||||
# Make all windows float by default
|
# Make all windows float by default
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
check-further-callbacks = true
|
check-further-callbacks = true
|
||||||
@@ -331,7 +331,7 @@ run = ['layout floating']
|
|||||||
4Firefox = ['main']
|
4Firefox = ['main']
|
||||||
5Chrome = ['main']
|
5Chrome = ['main']
|
||||||
6Chat = ['built-in']
|
6Chat = ['built-in']
|
||||||
7Music = ['built-in']
|
7Work = ['main']
|
||||||
8Mail = ['main']
|
8Music = ['built-in']
|
||||||
9File = ['main']
|
9File = ['main']
|
||||||
0Other = ['main']
|
0Other = ['main']
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
fontSize = 15;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.alacritty.settings.font.size = lib.mkForce fontSize;
|
||||||
|
programs.ghostty.settings.font-size = lib.mkForce fontSize;
|
||||||
|
programs.kitty.font.size = lib.mkForce fontSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nixpaks.firefox
|
||||||
|
];
|
||||||
|
|
||||||
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
|
programs.google-chrome = {
|
||||||
|
enable = true;
|
||||||
|
package = if pkgs.stdenv.isAarch64 then pkgs.chromium else pkgs.google-chrome;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
# pkgs-stable,
|
|
||||||
nur-ryan4yin,
|
|
||||||
blender-bin,
|
blender-bin,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
@@ -23,11 +20,11 @@
|
|||||||
# aseprite # Animated sprite editor & pixel art tool
|
# aseprite # Animated sprite editor & pixel art tool
|
||||||
|
|
||||||
# this app consumes a lot of storage, so do not install it currently
|
# this app consumes a lot of storage, so do not install it currently
|
||||||
# kicad # 3d printing, eletrical engineering
|
# kicad # 3d printing, electrical engineering
|
||||||
]
|
]
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
||||||
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
||||||
blender-bin.packages.${pkgs.system}.blender_4_2 # 3d modeling
|
blender-bin.packages.${pkgs.stdenv.hostPlatform.system}.blender_4_2 # 3d modeling
|
||||||
|
|
||||||
ldtk # A modern, versatile 2D level editor
|
ldtk # A modern, versatile 2D level editor
|
||||||
|
|
||||||
@@ -36,16 +33,14 @@
|
|||||||
# yosys # fpga synthesis
|
# yosys # fpga synthesis
|
||||||
# nextpnr # fpga place and route
|
# nextpnr # fpga place and route
|
||||||
# openfpgaloader # fpga programming
|
# openfpgaloader # fpga programming
|
||||||
# nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
# nur-ryan4yin.packages.${pkgs.stdenv.hostPlatform.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
||||||
]);
|
]);
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
# live streaming
|
# live streaming
|
||||||
obs-studio = {
|
obs-studio = {
|
||||||
enable = pkgs.stdenv.isx86_64;
|
enable = pkgs.stdenv.isx86_64;
|
||||||
plugins =
|
plugins = with pkgs.obs-studio-plugins; [
|
||||||
with pkgs.obs-studio-plugins;
|
|
||||||
[
|
|
||||||
# screen capture
|
# screen capture
|
||||||
wlrobs
|
wlrobs
|
||||||
# obs-ndi
|
# obs-ndi
|
||||||
@@ -68,11 +63,9 @@
|
|||||||
obs-backgroundremoval
|
obs-backgroundremoval
|
||||||
# advanced-scene-switcher
|
# advanced-scene-switcher
|
||||||
obs-pipewire-audio-capture
|
obs-pipewire-audio-capture
|
||||||
]
|
|
||||||
++ (lib.optionals pkgs.stdenv.isx86_64 [
|
|
||||||
obs-vaapi
|
obs-vaapi
|
||||||
obs-3d-effect
|
obs-3d-effect
|
||||||
]);
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
anyrunPackages = anyrun.packages.${pkgs.system};
|
anyrunPackages = anyrun.packages.${pkgs.stdenv.hostPlatform.system};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -30,11 +30,13 @@
|
|||||||
wl-clipboard # copying and pasting
|
wl-clipboard # copying and pasting
|
||||||
hyprpicker # color picker
|
hyprpicker # color picker
|
||||||
brightnessctl
|
brightnessctl
|
||||||
hyprshot # screen shot
|
|
||||||
wf-recorder # screen recording
|
|
||||||
# audio
|
# audio
|
||||||
alsa-utils # provides amixer/alsamixer/...
|
alsa-utils # provides amixer/alsamixer/...
|
||||||
networkmanagerapplet # provide GUI app: nm-connection-editor
|
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||||
|
# screenshot/screencast
|
||||||
|
flameshot
|
||||||
|
hyprshot # screen shot
|
||||||
|
wf-recorder # screen recording
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.configFile =
|
xdg.configFile =
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
pkgs-master,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
vscodeCliArgs = [
|
||||||
|
# https://code.visualstudio.com/docs/configure/settings-sync#_recommended-configure-the-keyring-to-use-with-vs-code
|
||||||
|
# For use with any package that implements the Secret Service API
|
||||||
|
# (for example gnome-keyring, kwallet5, KeepassXC)
|
||||||
|
"--password-store=gnome-libsecret"
|
||||||
|
];
|
||||||
|
|
||||||
|
code-cursor = pkgs-master.code-cursor;
|
||||||
|
# (pkgs-master.code-cursor.override {
|
||||||
|
# commandLineArgs = lib.concatStringsSep " " vscodeCliArgs;
|
||||||
|
# }).overrideAttrs
|
||||||
|
# (oldAttrs: rec {
|
||||||
|
# pname = "cursor";
|
||||||
|
# version = "2.1.36";
|
||||||
|
# src =
|
||||||
|
# with pkgs-master;
|
||||||
|
# appimageTools.extract {
|
||||||
|
# inherit pname version;
|
||||||
|
# src =
|
||||||
|
# let
|
||||||
|
# sources = {
|
||||||
|
# x86_64-linux = fetchurl {
|
||||||
|
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-x64/cursor | jq
|
||||||
|
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/x64/Cursor-2.1.36-x86_64.AppImage";
|
||||||
|
# hash = "sha256-aaprRB2BAaUCHj7m5aGacCBHisjN2pVZ+Ca3u1ifxBA=";
|
||||||
|
# };
|
||||||
|
# aarch64-linux = fetchurl {
|
||||||
|
# # curl -s https://api2.cursor.sh/updates/api/download/stable/linux-arm64/cursor | jq
|
||||||
|
# url = "https://downloads.cursor.com/production/9cd7c8b6cebcbccc1242df211dee45a4b6fe15e4/linux/arm64/Cursor-2.1.36-aarch64.AppImage";
|
||||||
|
# hash = "sha256-S2vFYBI6m0zjBJEDbk7gc6/zFiKWyhM73OUm1xsNx6Q=";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# in
|
||||||
|
# sources.${stdenv.hostPlatform.system};
|
||||||
|
# };
|
||||||
|
# sourceRoot = "${pname}-${version}-extracted/usr/share/cursor";
|
||||||
|
# });
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
pkgs.zed-editor
|
||||||
|
code-cursor
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.vscode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs-master.vscode.override {
|
||||||
|
commandLineArgs = vscodeCliArgs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -14,13 +14,15 @@
|
|||||||
type = "fcitx5";
|
type = "fcitx5";
|
||||||
fcitx5.waylandFrontend = true;
|
fcitx5.waylandFrontend = true;
|
||||||
fcitx5.addons = with pkgs; [
|
fcitx5.addons = with pkgs; [
|
||||||
# for flypy chinese input method
|
qt6Packages.fcitx5-configtool # GUI for fcitx5
|
||||||
fcitx5-rime
|
|
||||||
# needed enable rime using configtool after installed
|
|
||||||
fcitx5-configtool
|
|
||||||
# fcitx5-chinese-addons # we use rime instead
|
|
||||||
# fcitx5-mozc # japanese input method
|
|
||||||
fcitx5-gtk # gtk im module
|
fcitx5-gtk # gtk im module
|
||||||
|
|
||||||
|
# Chinese
|
||||||
|
fcitx5-rime # for flypy chinese input method
|
||||||
|
# fcitx5-chinese-addons # we use rime instead
|
||||||
|
|
||||||
|
# Japanese
|
||||||
|
fcitx5-mozc-ut
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
[Groups/0]
|
[Groups/0]
|
||||||
# Group Name
|
# Group Name
|
||||||
Name=Default
|
Name=Intl
|
||||||
# Layout
|
# Layout
|
||||||
Default Layout=us
|
Default Layout=us
|
||||||
# Default Input Method
|
# Default Input Method
|
||||||
DefaultIM=rime
|
DefaultIM=keyboard-us-altgr-intl
|
||||||
|
|
||||||
[Groups/0/Items/0]
|
[Groups/0/Items/0]
|
||||||
# Name
|
# Name
|
||||||
@@ -14,10 +14,43 @@ Layout=
|
|||||||
|
|
||||||
[Groups/0/Items/1]
|
[Groups/0/Items/1]
|
||||||
# Name
|
# Name
|
||||||
|
Name=keyboard-us-intl
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/0/Items/2]
|
||||||
|
# Name
|
||||||
|
Name=keyboard-us-altgr-intl
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1]
|
||||||
|
# Group Name
|
||||||
|
Name=Default
|
||||||
|
# Layout
|
||||||
|
Default Layout=us
|
||||||
|
# Default Input Method
|
||||||
|
DefaultIM=rime
|
||||||
|
|
||||||
|
[Groups/1/Items/0]
|
||||||
|
# Name
|
||||||
|
Name=keyboard-us
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1/Items/1]
|
||||||
|
# Name
|
||||||
Name=rime
|
Name=rime
|
||||||
# Layout
|
# Layout
|
||||||
Layout=
|
Layout=
|
||||||
|
|
||||||
|
[Groups/1/Items/2]
|
||||||
|
# Name
|
||||||
|
Name=mozc
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
[GroupOrder]
|
[GroupOrder]
|
||||||
0=Default
|
0=Default
|
||||||
|
1=Intl
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ in
|
|||||||
# https://github.com/Open-Wine-Components/umu-launcher
|
# https://github.com/Open-Wine-Components/umu-launcher
|
||||||
# a unified launcher for Windows games on Linux
|
# a unified launcher for Windows games on Linux
|
||||||
umu-launcher
|
umu-launcher
|
||||||
|
|
||||||
|
# Sed-like editor for binary files
|
||||||
|
# required by some games to fix problems
|
||||||
|
bbe
|
||||||
])
|
])
|
||||||
++ (with pkgs-x64; [
|
++ (with pkgs-x64; [
|
||||||
# a game launcher - great for epic games and gog games
|
# a game launcher - great for epic games and gog games
|
||||||
@@ -50,6 +54,7 @@ in
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
# a GUI game launcher for Steam/GoG/Epic
|
# a GUI game launcher for Steam/GoG/Epic
|
||||||
|
# https://lutris.net/games?ordering=-popularity
|
||||||
programs.lutris = {
|
programs.lutris = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultWinePackage = pkgs-x64.proton-ge-bin;
|
defaultWinePackage = pkgs-x64.proton-ge-bin;
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-x64,
|
pkgs-x64,
|
||||||
pkgs-unstable,
|
|
||||||
nur-ryan4yin,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
# media - control and enjoy audio/video
|
# media - control and enjoy audio/video
|
||||||
{
|
{
|
||||||
home.packages =
|
home.packages = with pkgs; [
|
||||||
with pkgs;
|
|
||||||
[
|
|
||||||
# audio control
|
# audio control
|
||||||
pavucontrol
|
pavucontrol
|
||||||
playerctl
|
playerctl
|
||||||
@@ -20,7 +16,7 @@
|
|||||||
libva-utils
|
libva-utils
|
||||||
vdpauinfo
|
vdpauinfo
|
||||||
vulkan-tools
|
vulkan-tools
|
||||||
glxinfo
|
mesa-demos
|
||||||
nvitop
|
nvitop
|
||||||
(pkgs-x64.zoom-us.override { hyprlandXdgDesktopPortalSupport = true; })
|
(pkgs-x64.zoom-us.override { hyprlandXdgDesktopPortalSupport = true; })
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -15,10 +14,10 @@
|
|||||||
freerdp # required by remmina
|
freerdp # required by remmina
|
||||||
|
|
||||||
# my custom hardened packages
|
# my custom hardened packages
|
||||||
pkgs.nixpaks.qq
|
nixpaks.qq
|
||||||
pkgs.nixpaks.telegram-desktop
|
nixpaks.telegram-desktop
|
||||||
# qqmusic
|
# qqmusic
|
||||||
pkgs.bwraps.wechat
|
bwraps.wechat
|
||||||
# discord # update too frequently, use the web version instead
|
# discord # update too frequently, use the web version instead
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
(lib.optionals pkgs.stdenv.isx86_64 [
|
(lib.optionals pkgs.stdenv.isx86_64 [
|
||||||
# https://joplinapp.org/help/
|
# https://joplinapp.org/help/
|
||||||
joplin # joplin-cli
|
joplin # joplin-cli
|
||||||
joplin-desktop
|
# joplin-desktop
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
# firefox-wayland
|
|
||||||
nixpaks.firefox
|
|
||||||
];
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
|
||||||
google-chrome = {
|
|
||||||
enable = true;
|
|
||||||
package = if pkgs.stdenv.isAarch64 then pkgs.chromium else pkgs.google-chrome;
|
|
||||||
|
|
||||||
# https://wiki.archlinux.org/title/Chromium#Native_Wayland_support
|
|
||||||
commandLineArgs = [
|
|
||||||
"--ozone-platform-hint=auto"
|
|
||||||
"--ozone-platform=wayland"
|
|
||||||
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
|
||||||
# (only supported by chromium/chrome at this time, not electron)
|
|
||||||
"--gtk-version=4"
|
|
||||||
# make it use text-input-v1, which works for kwin 5.27 and weston
|
|
||||||
"--enable-wayland-ime"
|
|
||||||
|
|
||||||
# enable hardware acceleration - vulkan api
|
|
||||||
# "--enable-features=Vulkan"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
vscode = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.vscode.override {
|
|
||||||
isInsiders = false;
|
|
||||||
# https://wiki.archlinux.org/title/Wayland#Electron
|
|
||||||
commandLineArgs = [
|
|
||||||
"--ozone-platform-hint=auto"
|
|
||||||
"--ozone-platform=wayland"
|
|
||||||
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
|
||||||
# (only supported by chromium/chrome at this time, not electron)
|
|
||||||
"--gtk-version=4"
|
|
||||||
# make it use text-input-v1, which works for kwin 5.27 and weston
|
|
||||||
"--enable-wayland-ime"
|
|
||||||
|
|
||||||
# TODO: fix https://github.com/microsoft/vscode/issues/187436
|
|
||||||
# still not works...
|
|
||||||
"--password-store=gnome" # use gnome-keyring as password store
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
zed-editor
|
|
||||||
code-cursor
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -136,3 +136,14 @@ bind = CTRL, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots
|
|||||||
bind = CTRL ALT, l, exec, swaylock
|
bind = CTRL ALT, l, exec, swaylock
|
||||||
bind = $mod SHIFT, x, exec, wlogout
|
bind = $mod SHIFT, x, exec, wlogout
|
||||||
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
|
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
|
||||||
|
|
||||||
|
|
||||||
|
# Gestures
|
||||||
|
# ============================================================================
|
||||||
|
# https://wiki.hypr.land/Configuring/Gestures/
|
||||||
|
|
||||||
|
# gesture = fingers, direction, action, options
|
||||||
|
gesture = 3, horizontal, workspace
|
||||||
|
gesture = 3, down, mod: ALT, close
|
||||||
|
gesture = 3, up, mod: SUPER, scale: 1.5, fullscreen
|
||||||
|
|
||||||
|
|||||||
@@ -103,11 +103,6 @@ master {
|
|||||||
new_on_top = true
|
new_on_top = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# See: https://wiki.hyprland.org/Configuring/Variables
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = off
|
|
||||||
}
|
|
||||||
|
|
||||||
#-- Input ----------------------------------------------------
|
#-- Input ----------------------------------------------------
|
||||||
# Configure mouse and touchpad here.
|
# Configure mouse and touchpad here.
|
||||||
input {
|
input {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ in
|
|||||||
variables = [ "--all" ];
|
variables = [ "--all" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
services.polkit-gnome.enable = true; # polkit
|
||||||
|
|
||||||
# NOTE: this executable is used by greetd to start a wayland session when system boot up
|
# NOTE: this executable is used by greetd to start a wayland session when system boot up
|
||||||
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
|
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
|
||||||
|
|||||||
@@ -7,12 +7,8 @@
|
|||||||
common = {
|
common = {
|
||||||
# Use xdg-desktop-portal-gtk for every portal interface...
|
# Use xdg-desktop-portal-gtk for every portal interface...
|
||||||
default = [
|
default = [
|
||||||
"gtk"
|
|
||||||
"hyprland"
|
"hyprland"
|
||||||
];
|
"gtk"
|
||||||
# except for the secret portal, which is handled by gnome-keyring
|
|
||||||
"org.freedesktop.impl.portal.Secret" = [
|
|
||||||
"gnome-keyring"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,232 @@
|
|||||||
|
// This config is in the KDL format: https://kdl.dev
|
||||||
|
// "/-" comments out the following node.
|
||||||
|
// Check the wiki for a full description of the configuration:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Introduction
|
||||||
|
|
||||||
|
// This is the main configuration file that includes all other config files
|
||||||
|
include "./keybindings.kdl"
|
||||||
|
include "./windowrules.kdl"
|
||||||
|
include "./spawn-at-startup.kdl"
|
||||||
|
include "./niri-hardware.kdl"
|
||||||
|
|
||||||
|
// Input device configuration.
|
||||||
|
// Find the full list of options on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Input
|
||||||
|
input {
|
||||||
|
keyboard {
|
||||||
|
xkb {
|
||||||
|
// You can set rules, model, layout, variant and options.
|
||||||
|
// For more information, see xkeyboard-config(7).
|
||||||
|
|
||||||
|
// For example:
|
||||||
|
// layout "us,ru"
|
||||||
|
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||||
|
|
||||||
|
// If this section is empty, niri will fetch xkb settings
|
||||||
|
// from org.freedesktop.locale1. You can control these using
|
||||||
|
// localectl set-x11-keymap.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable numlock on startup, omitting this setting disables it.
|
||||||
|
// numlock
|
||||||
|
|
||||||
|
// You can set the keyboard repeat parameters. The defaults match wlroots and sway.
|
||||||
|
// Delay is in milliseconds before the repeat starts. Rate is in characters per second.
|
||||||
|
// repeat-delay 600
|
||||||
|
// repeat-rate 25
|
||||||
|
|
||||||
|
// Niri can remember the keyboard layout globally (the default) or per-window.
|
||||||
|
// - "global" - layout change is global for all windows.
|
||||||
|
// - "window" - layout is tracked for each window individually.
|
||||||
|
// track-layout "global"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next sections include libinput settings.
|
||||||
|
// Omitting settings disables them, or leaves them at their default values.
|
||||||
|
// All commented-out settings here are examples, not defaults.
|
||||||
|
touchpad {
|
||||||
|
// tap // tap-to-click
|
||||||
|
dwt // disable-when-typing.
|
||||||
|
// dwtp // disable-when-trackpointing.
|
||||||
|
natural-scroll // inverts the scrolling direction.
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// tap-button-map "left-middle-right"
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse {
|
||||||
|
// natural-scroll // inverts the scrolling direction.
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||||
|
// warp-mouse-to-focus
|
||||||
|
|
||||||
|
// Focus windows and outputs automatically when moving the mouse into them.
|
||||||
|
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||||
|
// focus-follows-mouse max-scroll-amount="0%"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Settings that influence how windows are positioned and sized.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Layout
|
||||||
|
layout {
|
||||||
|
// Set gaps around windows in logical pixels.
|
||||||
|
gaps 8
|
||||||
|
|
||||||
|
// When to center a column when changing focus, options are:
|
||||||
|
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||||
|
// or right edge of the screen.
|
||||||
|
// - "always", the focused column will always be centered.
|
||||||
|
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||||
|
// together with the previously focused column.
|
||||||
|
center-focused-column "never"
|
||||||
|
|
||||||
|
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||||
|
preset-column-widths {
|
||||||
|
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||||
|
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||||
|
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
||||||
|
proportion 0.333333
|
||||||
|
proportion 0.500000
|
||||||
|
proportion 0.666667
|
||||||
|
|
||||||
|
// Fixed sets the width in logical pixels exactly.
|
||||||
|
// fixed 1920
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can change the default width of the new windows.
|
||||||
|
default-column-width { proportion 0.500000; }
|
||||||
|
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||||
|
// default-column-width {}
|
||||||
|
|
||||||
|
// By default focus ring and border are rendered as a solid background rectangle
|
||||||
|
// behind windows. That is, they will show up through semitransparent windows.
|
||||||
|
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||||
|
//
|
||||||
|
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||||
|
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||||
|
// client-side decorations.
|
||||||
|
//
|
||||||
|
// Alternatively, you can override it with a window rule called
|
||||||
|
// `draw-border-with-background`.
|
||||||
|
|
||||||
|
// You can change how the focus ring looks.
|
||||||
|
focus-ring {
|
||||||
|
// Uncomment this line to disable the focus ring.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// How many logical pixels the ring extends out from the windows.
|
||||||
|
width 4
|
||||||
|
|
||||||
|
// Colors can be set in a variety of ways:
|
||||||
|
// - CSS named colors: "red"
|
||||||
|
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||||
|
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||||
|
|
||||||
|
// Color of the ring on the active monitor.
|
||||||
|
active-color "#7fc8ff"
|
||||||
|
|
||||||
|
// Color of the ring on inactive monitors.
|
||||||
|
//
|
||||||
|
// The focus ring only draws around the active window, so the only place
|
||||||
|
// where you can see its inactive-color is on other monitors.
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// You can also use gradients. They take precedence over solid colors.
|
||||||
|
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||||
|
// The angle is the same as in linear-gradient, and is optional,
|
||||||
|
// defaulting to 180 (top-to-bottom gradient).
|
||||||
|
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||||
|
// Changing the color space is also supported, check the wiki for more info.
|
||||||
|
//
|
||||||
|
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
|
||||||
|
|
||||||
|
// You can also color the gradient relative to the entire view
|
||||||
|
// of the workspace, rather than relative to just the window itself.
|
||||||
|
// To do that, set relative-to="workspace-view".
|
||||||
|
//
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||||
|
border {
|
||||||
|
// The settings are the same as for the focus ring.
|
||||||
|
// If you enable the border, you probably want to disable the focus ring.
|
||||||
|
off
|
||||||
|
|
||||||
|
width 4
|
||||||
|
active-color "#ffc87f"
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// Color of the border around windows that request your attention.
|
||||||
|
urgent-color "#9b0000"
|
||||||
|
|
||||||
|
// Gradients can use a few different interpolation color spaces.
|
||||||
|
// For example, this is a pastel rainbow gradient via in="oklch longer hue".
|
||||||
|
//
|
||||||
|
// active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
|
||||||
|
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||||
|
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||||
|
// Left and right struts will cause the next window to the side to always be visible.
|
||||||
|
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||||
|
// layer-shell panels and regular gaps.
|
||||||
|
struts {
|
||||||
|
// left 64
|
||||||
|
// right 64
|
||||||
|
// top 64
|
||||||
|
// bottom 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor {
|
||||||
|
// Change the theme and size of the cursor as well as set the
|
||||||
|
// `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
|
||||||
|
// xcursor-theme "default"
|
||||||
|
// xcursor-size 24
|
||||||
|
}
|
||||||
|
|
||||||
|
hotkey-overlay {
|
||||||
|
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
|
||||||
|
skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||||
|
// If the client will specifically ask for CSD, the request will be honored.
|
||||||
|
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||||
|
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||||
|
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||||
|
// prefer-no-csd
|
||||||
|
|
||||||
|
// You can change the path where screenshots are saved.
|
||||||
|
// A ~ at the front will be expanded to the home directory.
|
||||||
|
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||||
|
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||||
|
|
||||||
|
// You can also set this to null to disable saving screenshots to disk.
|
||||||
|
// screenshot-path null
|
||||||
|
|
||||||
|
// Animation settings.
|
||||||
|
// The wiki explains how to configure individual animations:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Animations
|
||||||
|
animations {
|
||||||
|
// Uncomment to turn off all animations.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||||
|
// slowdown 3.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Window rules let you adjust behavior for individual windows.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Window-Rules
|
||||||
|
|
||||||
|
layer-rule {
|
||||||
|
match namespace="waybar"
|
||||||
|
opacity 0.800000
|
||||||
|
}
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
binds {
|
||||||
|
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||||
|
// in the end. To find an XKB name for a particular key, you may use a program
|
||||||
|
// like wev.
|
||||||
|
//
|
||||||
|
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||||
|
// when running as a winit window.
|
||||||
|
//
|
||||||
|
// Most actions that you can bind here can also be invoked programmatically with
|
||||||
|
// `niri msg action do-something`.
|
||||||
|
|
||||||
|
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||||
|
// shows a list of important hotkeys.
|
||||||
|
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||||
|
|
||||||
|
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||||
|
Mod+Return { spawn "foot"; }
|
||||||
|
Mod+Shift+Return { spawn "alacritty"; }
|
||||||
|
Mod+D { spawn "anyrun"; }
|
||||||
|
CTRL+Alt+L { spawn "swaylock"; }
|
||||||
|
|
||||||
|
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
|
||||||
|
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
|
||||||
|
// For example, this is a standard bind to toggle the screen reader (orca).
|
||||||
|
// Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
|
||||||
|
|
||||||
|
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||||
|
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||||
|
// Using spawn-sh allows to pass multiple arguments together with the command.
|
||||||
|
// "-l 1.0" limits the volume to 100%.
|
||||||
|
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
|
||||||
|
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
|
||||||
|
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
|
||||||
|
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
|
||||||
|
|
||||||
|
// Example media keys mapping using playerctl.
|
||||||
|
// This will work with any MPRIS-enabled media player.
|
||||||
|
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
|
||||||
|
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
|
||||||
|
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
|
||||||
|
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
|
||||||
|
|
||||||
|
// Example brightness key mappings for brightnessctl.
|
||||||
|
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
|
||||||
|
// but you need to manually put each argument in separate "" quotes.
|
||||||
|
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
|
||||||
|
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
|
||||||
|
|
||||||
|
// Open/close the Overview: a zoomed-out view of workspaces and windows.
|
||||||
|
// You can also move the mouse into the top-left hot corner,
|
||||||
|
// or do a four-finger swipe up on a touchpad.
|
||||||
|
// Mod+O repeat=false { toggle-overview; }
|
||||||
|
|
||||||
|
Mod+Q repeat=false { close-window; }
|
||||||
|
Mod+Left { focus-column-left; }
|
||||||
|
Mod+Down { focus-window-down; }
|
||||||
|
Mod+Up { focus-window-up; }
|
||||||
|
Mod+Right { focus-column-right; }
|
||||||
|
Mod+H { focus-column-left; }
|
||||||
|
Mod+J { focus-window-down; }
|
||||||
|
Mod+K { focus-window-up; }
|
||||||
|
Mod+L { focus-column-right; }
|
||||||
|
Mod+Ctrl+Left { move-column-left; }
|
||||||
|
Mod+Ctrl+Down { move-window-down; }
|
||||||
|
Mod+Ctrl+Up { move-window-up; }
|
||||||
|
Mod+Ctrl+Right { move-column-right; }
|
||||||
|
Mod+Ctrl+H { move-column-left; }
|
||||||
|
Mod+Ctrl+J { move-window-down; }
|
||||||
|
Mod+Ctrl+K { move-window-up; }
|
||||||
|
Mod+Ctrl+L { move-column-right; }
|
||||||
|
|
||||||
|
// Alternative commands that move across workspaces when reaching
|
||||||
|
// the first or last window in a column.
|
||||||
|
// Mod+J { focus-window-or-workspace-down; }
|
||||||
|
// Mod+K { focus-window-or-workspace-up; }
|
||||||
|
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||||
|
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+Home { focus-column-first; }
|
||||||
|
Mod+End { focus-column-last; }
|
||||||
|
Mod+Ctrl+Home { move-column-to-first; }
|
||||||
|
Mod+Ctrl+End { move-column-to-last; }
|
||||||
|
|
||||||
|
Mod+Shift+Left { focus-monitor-left; }
|
||||||
|
Mod+Shift+Down { focus-monitor-down; }
|
||||||
|
Mod+Shift+Up { focus-monitor-up; }
|
||||||
|
Mod+Shift+Right { focus-monitor-right; }
|
||||||
|
Mod+Shift+H { focus-monitor-left; }
|
||||||
|
Mod+Shift+J { focus-monitor-down; }
|
||||||
|
Mod+Shift+K { focus-monitor-up; }
|
||||||
|
Mod+Shift+L { focus-monitor-right; }
|
||||||
|
|
||||||
|
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||||
|
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// And you can also move a whole workspace to another monitor:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
"Mod+Page_Down" { focus-workspace-down; }
|
||||||
|
"Mod+Page_Up" { focus-workspace-up; }
|
||||||
|
Mod+U { focus-workspace-down; }
|
||||||
|
Mod+I { focus-workspace-up; }
|
||||||
|
"Mod+Ctrl+Page_Down" { move-column-to-workspace-down; }
|
||||||
|
"Mod+Ctrl+Page_Up" { move-column-to-workspace-up; }
|
||||||
|
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||||
|
"Mod+Shift+Page_Down" { move-workspace-down; }
|
||||||
|
"Mod+Shift+Page_Up" { move-workspace-up; }
|
||||||
|
Mod+Shift+U { move-workspace-down; }
|
||||||
|
Mod+Shift+I { move-workspace-up; }
|
||||||
|
|
||||||
|
// You can refer to workspaces by index. However, keep in mind that
|
||||||
|
// niri is a dynamic workspace system, so these commands are kind of
|
||||||
|
// "best effort". Trying to refer to a workspace index bigger than
|
||||||
|
// the current workspace count will instead refer to the bottommost
|
||||||
|
// (empty) workspace.
|
||||||
|
//
|
||||||
|
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||||
|
// will all refer to the 3rd workspace.
|
||||||
|
Mod+1 { focus-workspace "1terminal"; }
|
||||||
|
Mod+2 { focus-workspace "2browser"; }
|
||||||
|
Mod+3 { focus-workspace "3chat"; }
|
||||||
|
Mod+4 { focus-workspace "4music"; }
|
||||||
|
Mod+5 { focus-workspace "5mail"; }
|
||||||
|
Mod+6 { focus-workspace "6file"; }
|
||||||
|
Mod+7 { focus-workspace 7; }
|
||||||
|
Mod+8 { focus-workspace 8; }
|
||||||
|
Mod+9 { focus-workspace 9; }
|
||||||
|
Mod+0 { focus-workspace "0other"; }
|
||||||
|
Mod+Ctrl+1 { move-column-to-workspace "1terminal"; }
|
||||||
|
Mod+Ctrl+2 { move-column-to-workspace "2browser"; }
|
||||||
|
Mod+Ctrl+3 { move-column-to-workspace "3chat"; }
|
||||||
|
Mod+Ctrl+4 { move-column-to-workspace "4music"; }
|
||||||
|
Mod+Ctrl+5 { move-column-to-workspace "5mail"; }
|
||||||
|
Mod+Ctrl+6 { move-column-to-workspace "6file"; }
|
||||||
|
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||||
|
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||||
|
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||||
|
Mod+Ctrl+0 { move-column-to-workspace "0other"; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||||
|
|
||||||
|
// Switches focus between the current and the previous workspace.
|
||||||
|
// Mod+Tab { focus-workspace-previous; }
|
||||||
|
|
||||||
|
// The following binds move the focused window in and out of a column.
|
||||||
|
// If the window is alone, they will consume it into the nearby column to the side.
|
||||||
|
// If the window is already in a column, they will expel it out.
|
||||||
|
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||||
|
Mod+BracketRight { consume-or-expel-window-right; }
|
||||||
|
|
||||||
|
// Consume one window from the right to the bottom of the focused column.
|
||||||
|
Mod+Comma { consume-window-into-column; }
|
||||||
|
// Expel the bottom window from the focused column to the right.
|
||||||
|
Mod+Period { expel-window-from-column; }
|
||||||
|
|
||||||
|
Mod+R { switch-preset-column-width; }
|
||||||
|
// Cycling through the presets in reverse order is also possible.
|
||||||
|
// Mod+R { switch-preset-column-width-back; }
|
||||||
|
Mod+Shift+R { switch-preset-window-height; }
|
||||||
|
Mod+Ctrl+R { reset-window-height; }
|
||||||
|
Mod+F { maximize-column; }
|
||||||
|
Mod+Shift+F { fullscreen-window; }
|
||||||
|
|
||||||
|
// Expand the focused column to space not taken up by other fully visible columns.
|
||||||
|
// Makes the column "fill the rest of the space".
|
||||||
|
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||||
|
|
||||||
|
Mod+C { center-column; }
|
||||||
|
|
||||||
|
// Center all fully visible columns on screen.
|
||||||
|
Mod+Ctrl+C { center-visible-columns; }
|
||||||
|
|
||||||
|
// Finer width adjustments.
|
||||||
|
// This command can also:
|
||||||
|
// * set width in pixels: "1000"
|
||||||
|
// * adjust width in pixels: "-5" or "+5"
|
||||||
|
// * set width as a percentage of screen width: "25%"
|
||||||
|
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||||
|
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||||
|
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||||
|
Mod+Minus { set-column-width "-10%"; }
|
||||||
|
Mod+Equal { set-column-width "+10%"; }
|
||||||
|
|
||||||
|
// Finer height adjustments when in column with other windows.
|
||||||
|
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||||
|
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||||
|
|
||||||
|
// Move the focused window between the floating and the tiling layout.
|
||||||
|
Mod+V { toggle-window-floating; }
|
||||||
|
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||||
|
|
||||||
|
// Toggle tabbed column display mode.
|
||||||
|
// Windows in this column will appear as vertical tabs,
|
||||||
|
// rather than stacked on top of each other.
|
||||||
|
Mod+W { toggle-column-tabbed-display; }
|
||||||
|
|
||||||
|
// Actions to switch layouts.
|
||||||
|
// Note: if you uncomment these, make sure you do NOT have
|
||||||
|
// a matching layout switch hotkey configured in xkb options above.
|
||||||
|
// Having both at once on the same hotkey will break the switching,
|
||||||
|
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||||
|
// Mod+Space { switch-layout "next"; }
|
||||||
|
// Mod+Shift+Space { switch-layout "prev"; }
|
||||||
|
|
||||||
|
Print { screenshot; }
|
||||||
|
Ctrl+Print { screenshot-screen; }
|
||||||
|
Alt+Print { screenshot-window; }
|
||||||
|
|
||||||
|
// Applications such as remote-desktop clients and software KVM switches may
|
||||||
|
// request that niri stops processing the keyboard shortcuts defined here
|
||||||
|
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||||
|
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||||
|
// so a buggy application can't hold your session hostage.
|
||||||
|
//
|
||||||
|
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||||
|
// which ensures niri always processes them, even when an inhibitor is active.
|
||||||
|
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||||
|
|
||||||
|
Mod+Shift+E { wlogout; }
|
||||||
|
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||||
|
Ctrl+Alt+Delete { quit; }
|
||||||
|
|
||||||
|
// Powers off the monitors. To turn them back on, do any input like
|
||||||
|
// moving the mouse or pressing any other key.
|
||||||
|
Mod+Shift+P { power-off-monitors; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
// Add lines like this to spawn processes at startup.
|
||||||
|
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||||
|
// which may be more convenient to use.
|
||||||
|
// See the binds section below for more spawn examples.
|
||||||
|
|
||||||
|
// This line starts waybar, a commonly used bar for Wayland compositors.
|
||||||
|
// spawn-at-startup "waybar"
|
||||||
|
|
||||||
|
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
|
||||||
|
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
|
||||||
|
|
||||||
|
// Terminal applications
|
||||||
|
spawn-at-startup "foot"
|
||||||
|
spawn-at-startup "alacritty"
|
||||||
|
spawn-at-startup "ghostty"
|
||||||
|
|
||||||
|
// Network proxy
|
||||||
|
spawn-at-startup "clash-verge"
|
||||||
|
|
||||||
|
// Web browsers
|
||||||
|
spawn-at-startup "firefox"
|
||||||
|
spawn-at-startup "google-chrome-stable"
|
||||||
|
spawn-at-startup "chromium-browser"
|
||||||
|
|
||||||
|
// Communication applications
|
||||||
|
spawn-at-startup "Telegram"
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
// Window rules let you adjust behavior for individual windows.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Window-Rules
|
||||||
|
|
||||||
|
// Terminal applications - open in workspace 1
|
||||||
|
window-rule {
|
||||||
|
match app-id="foot"
|
||||||
|
open-on-workspace "1terminal"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="Alacritty"
|
||||||
|
open-on-workspace "1terminal"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="com.mitchellh.ghostty"
|
||||||
|
open-on-workspace "1terminal"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Web browsers - open in workspace 2
|
||||||
|
window-rule {
|
||||||
|
match app-id="firefox"
|
||||||
|
open-on-workspace "2browser"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="google-chrome"
|
||||||
|
open-on-workspace "2browser"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="chromium-browser"
|
||||||
|
open-on-workspace "2browser"
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chat applications - open in workspace 3
|
||||||
|
window-rule {
|
||||||
|
match app-id="org.telegram.desktop"
|
||||||
|
open-on-workspace "3chat"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="wechat"
|
||||||
|
open-on-workspace "3chat"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="QQ"
|
||||||
|
open-on-workspace "3chat"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gaming applications - open in workspace 4
|
||||||
|
window-rule {
|
||||||
|
match app-id="steam"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="steam_app_default"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="heroic"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="net.lutris.Lutris"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="com.vysp3r.ProtonPlus"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
// Run anime games on Linux
|
||||||
|
match app-id="^moe.launcher"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
// All *.exe (Windows applications)
|
||||||
|
match app-id=".exe$"
|
||||||
|
open-on-workspace "4gaming"
|
||||||
|
}
|
||||||
|
|
||||||
|
// File management applications - open in workspace 6
|
||||||
|
window-rule {
|
||||||
|
match app-id="com.github.johnfactotum.Foliate"
|
||||||
|
open-on-workspace "6file"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="thunar"
|
||||||
|
open-on-workspace "6file"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Other applications - open in workspace 0
|
||||||
|
window-rule {
|
||||||
|
match app-id="clash-verge"
|
||||||
|
open-on-workspace "0other"
|
||||||
|
}
|
||||||
|
window-rule {
|
||||||
|
match app-id="Zoom Workplace"
|
||||||
|
open-on-workspace "0other"
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
niri,
|
|
||||||
...
|
...
|
||||||
}@args:
|
}@args:
|
||||||
let
|
let
|
||||||
@@ -11,27 +10,6 @@ in
|
|||||||
{
|
{
|
||||||
options.modules.desktop.niri = {
|
options.modules.desktop.niri = {
|
||||||
enable = lib.mkEnableOption "niri compositor";
|
enable = lib.mkEnableOption "niri compositor";
|
||||||
settings = lib.mkOption {
|
|
||||||
type =
|
|
||||||
with lib.types;
|
|
||||||
let
|
|
||||||
valueType =
|
|
||||||
nullOr (oneOf [
|
|
||||||
bool
|
|
||||||
int
|
|
||||||
float
|
|
||||||
str
|
|
||||||
path
|
|
||||||
(attrsOf valueType)
|
|
||||||
(listOf valueType)
|
|
||||||
])
|
|
||||||
// {
|
|
||||||
description = "niri configuration value";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
valueType;
|
|
||||||
default = { };
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable (
|
config = lib.mkIf cfg.enable (
|
||||||
@@ -42,7 +20,35 @@ in
|
|||||||
xwayland-satellite
|
xwayland-satellite
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.niri.config = cfg.settings;
|
xdg.configFile =
|
||||||
|
let
|
||||||
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
|
confPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/niri/conf";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"niri/config.kdl".source = mkSymlink "${confPath}/config.kdl";
|
||||||
|
"niri/keybindings.kdl".source = mkSymlink "${confPath}/keybindings.kdl";
|
||||||
|
"niri/spawn-at-startup.kdl".source = mkSymlink "${confPath}/spawn-at-startup.kdl";
|
||||||
|
"niri/windowrules.kdl".source = mkSymlink "${confPath}/windowrules.kdl";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.niri-flake-polkit = {
|
||||||
|
Unit = {
|
||||||
|
Description = "PolicyKit Authentication Agent provided by niri-flake";
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
];
|
||||||
|
Wants = [ "graphical-session-pre.target" ];
|
||||||
|
};
|
||||||
|
Install.WantedBy = [ "niri.service" ];
|
||||||
|
Service = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.kdePackages.polkit-kde-agent-1}/libexec/polkit-kde-authentication-agent-1";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 1;
|
||||||
|
TimeoutStopSec = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# NOTE: this executable is used by greetd to start a wayland session when system boot up
|
# NOTE: this executable is used by greetd to start a wayland session when system boot up
|
||||||
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
|
# with such a vendor-no-locking script, we can switch to another wayland compositor without modifying greetd's config in NixOS module
|
||||||
@@ -56,10 +62,6 @@ in
|
|||||||
executable = true;
|
executable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
(import ./settings.nix niri)
|
|
||||||
(import ./keybindings.nix niri)
|
|
||||||
(import ./spawn-at-startup.nix niri)
|
|
||||||
(import ./windowrules.nix niri)
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,214 +0,0 @@
|
|||||||
niri: {
|
|
||||||
programs.niri.config =
|
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
(plain "binds" [
|
|
||||||
# Keys consist of modifiers separated by + signs, followed by an XKB key name
|
|
||||||
# in the end. To find an XKB name for a particular key, you may use a program
|
|
||||||
# like wev.
|
|
||||||
#
|
|
||||||
# "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
|
||||||
# when running as a winit window.
|
|
||||||
#
|
|
||||||
# Most actions that you can bind here can also be invoked programmatically with
|
|
||||||
# `niri msg action do-something`.
|
|
||||||
|
|
||||||
# Mod-Shift-/, which is usually the same as Mod-?,
|
|
||||||
# shows a list of important hotkeys.
|
|
||||||
(plain "Mod+Shift+Slash" [ (flag "show-hotkey-overlay") ])
|
|
||||||
|
|
||||||
# Suggested binds for running programs: terminal, app launcher, screen locker.
|
|
||||||
(plain "Mod+Return" [ (leaf "spawn" [ "foot" ]) ])
|
|
||||||
(plain "Mod+Shift+Return" [ (leaf "spawn" [ "alacritty" ]) ])
|
|
||||||
(plain "Mod+D" [ (leaf "spawn" [ "anyrun" ]) ])
|
|
||||||
(plain "CTRL+Alt+L" [ (leaf "spawn" [ "swaylock" ]) ])
|
|
||||||
|
|
||||||
# You can also use a shell:
|
|
||||||
# (plain "Mod+T" [(leaf "spawn" [ "bash" "-c" "notify-send hello && exec alacritty" ])])
|
|
||||||
|
|
||||||
# Example volume keys mappings for PipeWire & WirePlumber.
|
|
||||||
(plain "XF86AudioRaiseVolume" [
|
|
||||||
(leaf "spawn" [
|
|
||||||
"wpctl"
|
|
||||||
"set-volume"
|
|
||||||
"@DEFAULT_AUDIO_SINK@"
|
|
||||||
"0.1+"
|
|
||||||
])
|
|
||||||
])
|
|
||||||
(plain "XF86AudioLowerVolume" [
|
|
||||||
(leaf "spawn" [
|
|
||||||
"wpctl"
|
|
||||||
"set-volume"
|
|
||||||
"@DEFAULT_AUDIO_SINK@"
|
|
||||||
"0.1-"
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "Mod+Q" [ (flag "close-window") ])
|
|
||||||
|
|
||||||
(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-left") ])
|
|
||||||
(plain "Mod+J" [ (flag "focus-window-down") ])
|
|
||||||
(plain "Mod+K" [ (flag "focus-window-up") ])
|
|
||||||
(plain "Mod+L" [ (flag "focus-column-right") ])
|
|
||||||
|
|
||||||
(plain "Mod+Ctrl+Left" [ (flag "move-column-left") ])
|
|
||||||
(plain "Mod+Ctrl+Down" [ (flag "move-window-down") ])
|
|
||||||
(plain "Mod+Ctrl+Up" [ (flag "move-window-up") ])
|
|
||||||
(plain "Mod+Ctrl+Right" [ (flag "move-column-right") ])
|
|
||||||
(plain "Mod+Ctrl+H" [ (flag "move-column-left") ])
|
|
||||||
(plain "Mod+Ctrl+J" [ (flag "move-window-down") ])
|
|
||||||
(plain "Mod+Ctrl+K" [ (flag "move-window-up") ])
|
|
||||||
(plain "Mod+Ctrl+L" [ (flag "move-column-right") ])
|
|
||||||
|
|
||||||
# Alternative commands that move across workspaces when reaching
|
|
||||||
# the first or last window in a column.
|
|
||||||
# (plain "Mod+J" [(flag "focus-window-or-workspace-down")])
|
|
||||||
# (plain "Mod+K" [(flag "focus-window-or-workspace-up")])
|
|
||||||
# (plain "Mod+Ctrl+J" [(flag "move-window-down-or-to-workspace-down")])
|
|
||||||
# (plain "Mod+Ctrl+K" [(flag "move-window-up-or-to-workspace-up")])
|
|
||||||
|
|
||||||
(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+Shift+Left" [ (flag "focus-monitor-left") ])
|
|
||||||
(plain "Mod+Shift+Down" [ (flag "focus-monitor-down") ])
|
|
||||||
(plain "Mod+Shift+Up" [ (flag "focus-monitor-up") ])
|
|
||||||
(plain "Mod+Shift+Right" [ (flag "focus-monitor-right") ])
|
|
||||||
(plain "Mod+Shift+H" [ (flag "focus-monitor-left") ])
|
|
||||||
(plain "Mod+Shift+J" [ (flag "focus-monitor-down") ])
|
|
||||||
(plain "Mod+Shift+K" [ (flag "focus-monitor-up") ])
|
|
||||||
(plain "Mod+Shift+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") ])
|
|
||||||
|
|
||||||
# Alternatively, there are commands to move just a single window:
|
|
||||||
# (plain "Mod+Shift+Ctrl+Left" [(flag "move-window-to-monitor-left")])
|
|
||||||
# ...
|
|
||||||
|
|
||||||
# And you can also move a whole workspace to another monitor:
|
|
||||||
# (plain "Mod+Shift+Ctrl+Left" [(flag "move-workspace-to-monitor-left")])
|
|
||||||
# ...
|
|
||||||
|
|
||||||
(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+Ctrl+Page_Down" [ (flag "move-column-to-workspace-down") ])
|
|
||||||
(plain "Mod+Ctrl+Page_Up" [ (flag "move-column-to-workspace-up") ])
|
|
||||||
(plain "Mod+Ctrl+U" [ (flag "move-column-to-workspace-down") ])
|
|
||||||
(plain "Mod+Ctrl+I" [ (flag "move-column-to-workspace-up") ])
|
|
||||||
|
|
||||||
# Alternatively, there are commands to move just a single window:
|
|
||||||
# (plain "Mod+Ctrl+Page_Down" [(flag "move-window-to-workspace-down")])
|
|
||||||
# ...
|
|
||||||
|
|
||||||
(plain "Mod+Shift+Page_Down" [ (flag "move-workspace-down") ])
|
|
||||||
(plain "Mod+Shift+Page_Up" [ (flag "move-workspace-up") ])
|
|
||||||
(plain "Mod+Shift+U" [ (flag "move-workspace-down") ])
|
|
||||||
(plain "Mod+Shift+I" [ (flag "move-workspace-up") ])
|
|
||||||
|
|
||||||
# You can refer to workspaces by index. However, keep in mind that
|
|
||||||
# niri is a dynamic workspace system, so these commands are kind of
|
|
||||||
# "best effort". Trying to refer to a workspace index bigger than
|
|
||||||
# the current workspace count will instead refer to the bottommost
|
|
||||||
# (empty) workspace.
|
|
||||||
#
|
|
||||||
# For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
|
||||||
# will all refer to the 3rd workspace.
|
|
||||||
(plain "Mod+1" [ (leaf "focus-workspace" "1terminal") ])
|
|
||||||
(plain "Mod+2" [ (leaf "focus-workspace" "2browser") ])
|
|
||||||
(plain "Mod+3" [ (leaf "focus-workspace" "3chat") ])
|
|
||||||
(plain "Mod+4" [ (leaf "focus-workspace" "4music") ])
|
|
||||||
(plain "Mod+5" [ (leaf "focus-workspace" "5mail") ])
|
|
||||||
(plain "Mod+6" [ (leaf "focus-workspace" "6file") ])
|
|
||||||
(plain "Mod+7" [ (leaf "focus-workspace" 7) ])
|
|
||||||
(plain "Mod+8" [ (leaf "focus-workspace" 8) ])
|
|
||||||
(plain "Mod+9" [ (leaf "focus-workspace" 9) ])
|
|
||||||
(plain "Mod+0" [ (leaf "focus-workspace" "0other") ])
|
|
||||||
(plain "Mod+Ctrl+1" [ (leaf "move-column-to-workspace" "1terminal") ])
|
|
||||||
(plain "Mod+Ctrl+2" [ (leaf "move-column-to-workspace" "2browser") ])
|
|
||||||
(plain "Mod+Ctrl+3" [ (leaf "move-column-to-workspace" "3chat") ])
|
|
||||||
(plain "Mod+Ctrl+4" [ (leaf "move-column-to-workspace" "4music") ])
|
|
||||||
(plain "Mod+Ctrl+5" [ (leaf "move-column-to-workspace" "5mail") ])
|
|
||||||
(plain "Mod+Ctrl+6" [ (leaf "move-column-to-workspace" "6file") ])
|
|
||||||
(plain "Mod+Ctrl+7" [ (leaf "move-column-to-workspace" 7) ])
|
|
||||||
(plain "Mod+Ctrl+8" [ (leaf "move-column-to-workspace" 8) ])
|
|
||||||
(plain "Mod+Ctrl+9" [ (leaf "move-column-to-workspace" 9) ])
|
|
||||||
(plain "Mod+Ctrl+0" [ (leaf "move-column-to-workspace" "0other") ])
|
|
||||||
|
|
||||||
# Alternatively, there are commands to move just a single window:
|
|
||||||
# (plain "Mod+Ctrl+1" [(leaf "move-window-to-workspace" 1)])
|
|
||||||
|
|
||||||
(plain "Mod+Comma" [ (flag "consume-window-into-column") ])
|
|
||||||
(plain "Mod+Period" [ (flag "expel-window-from-column") ])
|
|
||||||
|
|
||||||
# There are also commands that consume or expel a single window to the side.
|
|
||||||
# (plain "Mod+BracketLeft" [(flag "consume-or-expel-window-left")])
|
|
||||||
# (plain "Mod+BracketRight" [(flag "consume-or-expel-window-right")])
|
|
||||||
|
|
||||||
(plain "Mod+R" [ (flag "switch-preset-column-width") ])
|
|
||||||
(plain "Mod+F" [ (flag "maximize-column") ])
|
|
||||||
(plain "Mod+Shift+F" [ (flag "fullscreen-window") ])
|
|
||||||
(plain "Mod+C" [ (flag "center-column") ])
|
|
||||||
|
|
||||||
# Finer width adjustments.
|
|
||||||
# This command can also:
|
|
||||||
# * set width in pixels: "1000"
|
|
||||||
# * adjust width in pixels: "-5" or "+5"
|
|
||||||
# * set width as a percentage of screen width: "25%"
|
|
||||||
# * adjust width as a percentage of screen width: "-10%" or "+10%"
|
|
||||||
# Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
|
||||||
# (leaf "set-column-width" "100") will make the column occupy 200 physical screen pixels.
|
|
||||||
(plain "Mod+Minus" [ (leaf "set-column-width" "-10%") ])
|
|
||||||
(plain "Mod+Equal" [ (leaf "set-column-width" "+10%") ])
|
|
||||||
|
|
||||||
# Finer height adjustments when in column with other windows.
|
|
||||||
(plain "Mod+Shift+Minus" [ (leaf "set-window-height" "-10%") ])
|
|
||||||
(plain "Mod+Shift+Equal" [ (leaf "set-window-height" "+10%") ])
|
|
||||||
|
|
||||||
# Actions to switch layouts.
|
|
||||||
# Note: if you uncomment these, make sure you do NOT have
|
|
||||||
# a matching layout switch hotkey configured in xkb options above.
|
|
||||||
# Having both at once on the same hotkey will break the switching,
|
|
||||||
# since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
|
||||||
# (plain "Mod+Space" [(leaf "switch-layout" "next")])
|
|
||||||
# (plain "Mod+Shift+Space" [(leaf "switch-layout" "prev")])
|
|
||||||
|
|
||||||
# Take an area screenshot. Select the area to screenshot with mouse
|
|
||||||
(plain "Print" [ (flag "screenshot") ])
|
|
||||||
# Take a screenshot of the focused monitor
|
|
||||||
(plain "Ctrl+Print" [ (flag "screenshot-screen") ])
|
|
||||||
# Take a screenshot of the focused window
|
|
||||||
(plain "Alt+Print" [ (flag "screenshot-window") ])
|
|
||||||
|
|
||||||
(plain "Mod+Shift+E" [ (leaf "spawn" [ "wlogout" ]) ])
|
|
||||||
|
|
||||||
(plain "Mod+Shift+P" [ (flag "power-off-monitors") ])
|
|
||||||
|
|
||||||
# This debug bind will tint all surfaces green, unless they are being
|
|
||||||
# directly scanned out. It's therefore useful to check if direct scanout
|
|
||||||
# is working.
|
|
||||||
# (plain "Mod+Shift+Ctrl+T" [(flag "toggle-debug-tint")])
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,276 +0,0 @@
|
|||||||
niri: {
|
|
||||||
programs.niri.config =
|
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
(plain "input" [
|
|
||||||
(plain "keyboard" [
|
|
||||||
(plain "xkb" [
|
|
||||||
# You can set rules, model, layout, variant and options.
|
|
||||||
# For more information, see xkeyboard-config(7).
|
|
||||||
|
|
||||||
# For example:
|
|
||||||
# (leaf "layout" "us,ru")
|
|
||||||
# (leaf "options" "grp:win_space_toggle,compose:ralt,ctrl:nocaps")
|
|
||||||
])
|
|
||||||
|
|
||||||
# You can set the keyboard repeat parameters. The defaults match wlroots and sway.
|
|
||||||
# Delay is in milliseconds before the repeat starts. Rate is in characters per second.
|
|
||||||
# (leaf "repeat-delay" 600)
|
|
||||||
# (leaf "repeat-rate" 25)
|
|
||||||
|
|
||||||
# Niri can remember the keyboard layout globally (the default) or per-window.
|
|
||||||
# - "global" - layout change is global for all windows.
|
|
||||||
# - "window" - layout is tracked for each window individually.
|
|
||||||
# (leaf "track-layout" "global")
|
|
||||||
])
|
|
||||||
|
|
||||||
# Next sections include libinput settings.
|
|
||||||
# Omitting settings disables them, or leaves them at their default values.
|
|
||||||
(plain "touchpad" [
|
|
||||||
# (flag "tap") # tap-to-click
|
|
||||||
(flag "dwt") # disable-when-typing.
|
|
||||||
# (flag "dwtp") # disable-when-trackpointing.
|
|
||||||
(flag "natural-scroll") # inverts the scrolling direction.
|
|
||||||
# (leaf "accel-speed" 0.2)
|
|
||||||
# (leaf "accel-profile" "flat")
|
|
||||||
# (leaf "tap-button-map" "left-middle-right")
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "mouse" [
|
|
||||||
# (flag "natural-scroll") # inverts the scrolling direction.
|
|
||||||
# (leaf "accel-speed" 0.2)
|
|
||||||
# (leaf "accel-profile" "flat")
|
|
||||||
])
|
|
||||||
|
|
||||||
# By default, niri will take over the power button to make it sleep
|
|
||||||
# instead of power off.
|
|
||||||
# Uncomment this if you would like to configure the power button elsewhere
|
|
||||||
# (i.e. logind.conf).
|
|
||||||
# (flag "disable-power-key-handling")
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "layout" [
|
|
||||||
# By default focus ring and border are rendered as a solid background rectangle
|
|
||||||
# behind windows. That is, they will show up through semitransparent windows.
|
|
||||||
# This is because windows using client-side decorations can have an arbitrary shape.
|
|
||||||
#
|
|
||||||
# If you don't like that, you should uncomment `prefer-no-csd` below.
|
|
||||||
# Niri will draw focus ring and border *around* windows that agree to omit their
|
|
||||||
# client-side decorations.
|
|
||||||
|
|
||||||
# You can change how the focus ring looks.
|
|
||||||
(plain "focus-ring" [
|
|
||||||
# Uncomment this line to disable the focus ring.
|
|
||||||
# (flag "off")
|
|
||||||
|
|
||||||
# How many logical pixels the ring extends out from the windows.
|
|
||||||
(leaf "width" 4)
|
|
||||||
|
|
||||||
# Colors can be set in a variety of ways:
|
|
||||||
# - CSS named colors: "red"
|
|
||||||
# - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
|
||||||
# - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
|
||||||
|
|
||||||
# Color of the ring on the active monitor.
|
|
||||||
(leaf "active-color" "#7fc8ff")
|
|
||||||
|
|
||||||
# Color of the ring on inactive monitors.
|
|
||||||
(leaf "inactive-color" "#505050")
|
|
||||||
|
|
||||||
# Additionally, there's a legacy RGBA syntax:
|
|
||||||
# (leaf "active-color" [ 127 200 255 255 ])
|
|
||||||
|
|
||||||
# You can also use gradients. They take precedence over solid colors.
|
|
||||||
# Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
|
||||||
# The angle is the same as in linear-gradient, and is optional,
|
|
||||||
# defaulting to 180 (top-to-bottom gradient).
|
|
||||||
# You can use any CSS linear-gradient tool on the web to set these up.
|
|
||||||
#
|
|
||||||
# (leaf "active-gradient" { from="#80c8ff"; to="#bbddff"; angle=45; })
|
|
||||||
|
|
||||||
# You can also color the gradient relative to the entire view
|
|
||||||
# of the workspace, rather than relative to just the window itself.
|
|
||||||
# To do that, set relative-to="workspace-view";
|
|
||||||
#
|
|
||||||
# (leaf "inactive-gradient" { from="#505050"; to="#808080"; angle=45; relative-to="workspace-view"; })
|
|
||||||
])
|
|
||||||
|
|
||||||
# You can also add a border. It's similar to the focus ring, but always visible.
|
|
||||||
(plain "border" [
|
|
||||||
# The settings are the same as for the focus ring.
|
|
||||||
# If you enable the border, you probably want to disable the focus ring.
|
|
||||||
(flag "off")
|
|
||||||
|
|
||||||
(leaf "width" 4)
|
|
||||||
(leaf "active-color" "#ffc87f")
|
|
||||||
(leaf "inactive-color" "#505050")
|
|
||||||
|
|
||||||
# (leaf "active-gradient" { from="#ffbb66"; to="#ffc880"; angle=45; relative-to="workspace-view"; })
|
|
||||||
# (leaf "inactive-gradient" { from="#505050"; to="#808080"; angle=45; relative-to="workspace-view"; })
|
|
||||||
])
|
|
||||||
|
|
||||||
# You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
|
||||||
(plain "preset-column-widths" [
|
|
||||||
# Proportion sets the width as a fraction of the output width, taking gaps into account.
|
|
||||||
# For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
|
||||||
# The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
|
||||||
(leaf "proportion" (1.0 / 3.0))
|
|
||||||
(leaf "proportion" (1.0 / 2.0))
|
|
||||||
(leaf "proportion" (2.0 / 3.0))
|
|
||||||
|
|
||||||
# Fixed sets the width in logical pixels exactly.
|
|
||||||
# (leaf "fixed" 1920)
|
|
||||||
])
|
|
||||||
|
|
||||||
# You can change the default width of the new windows.
|
|
||||||
(plain "default-column-width" [
|
|
||||||
(leaf "proportion" 0.5)
|
|
||||||
])
|
|
||||||
# If you leave the children empty, the windows themselves will decide their initial width.
|
|
||||||
# (plain "default-column-width" [])
|
|
||||||
|
|
||||||
# Set gaps around windows in logical pixels.
|
|
||||||
(leaf "gaps" 8)
|
|
||||||
|
|
||||||
# Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
|
||||||
# You can think of them as a kind of outer gaps. They are set in logical pixels.
|
|
||||||
# Left and right struts will cause the next window to the side to always be visible.
|
|
||||||
# Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
|
||||||
# layer-shell panels and regular gaps.
|
|
||||||
(plain "struts" [
|
|
||||||
# (leaf "left" 64)
|
|
||||||
# (leaf "right" 64)
|
|
||||||
# (leaf "top" 64)
|
|
||||||
# (leaf "bottom" 64)
|
|
||||||
])
|
|
||||||
|
|
||||||
# When to center a column when changing focus, options are:
|
|
||||||
# - "never", default behavior, focusing an off-screen column will keep at the left
|
|
||||||
# or right edge of the screen.
|
|
||||||
# - "on-overflow", focusing a column will center it if it doesn't fit
|
|
||||||
# together with the previously focused column.
|
|
||||||
# - "always", the focused column will always be centered.
|
|
||||||
(leaf "center-focused-column" "never")
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "cursor" [
|
|
||||||
# Change the theme and size of the cursor as well as set the
|
|
||||||
# `XCURSOR_THEME` and `XCURSOR_SIZE` env variables.
|
|
||||||
# (leaf "xcursor-theme" "default")
|
|
||||||
# (leaf "xcursor-size" 24)
|
|
||||||
])
|
|
||||||
|
|
||||||
# Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
|
||||||
# If the client will specifically ask for CSD, the request will be honored.
|
|
||||||
# Additionally, clients will be informed that they are tiled, removing some rounded corners.
|
|
||||||
# (flag "prefer-no-csd")
|
|
||||||
|
|
||||||
# You can change the path where screenshots are saved.
|
|
||||||
# A ~ at the front will be expanded to the home directory.
|
|
||||||
# The path is formatted with strftime(3) to give you the screenshot date and time.
|
|
||||||
(leaf "screenshot-path" "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png")
|
|
||||||
|
|
||||||
# You can also set this to null to disable saving screenshots to disk.
|
|
||||||
# (leaf "screenshot-path" null)
|
|
||||||
|
|
||||||
# Settings for the "Important Hotkeys" overlay.
|
|
||||||
(plain "hotkey-overlay" [
|
|
||||||
# Uncomment this line if you don't want to see the hotkey help at niri startup.
|
|
||||||
# (flag "skip-at-startup")
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "layer-rule" [
|
|
||||||
(leaf "match" { namespace = "waybar"; })
|
|
||||||
(leaf "opacity" 0.8)
|
|
||||||
])
|
|
||||||
|
|
||||||
# Animation settings.
|
|
||||||
(plain "animations" [
|
|
||||||
# Uncomment to turn off all animations.
|
|
||||||
# (flag "off")
|
|
||||||
|
|
||||||
# Slow down all animations by this factor. Values below 1 speed them up instead.
|
|
||||||
# (leaf "slowdown" 3.0)
|
|
||||||
|
|
||||||
# You can configure all individual animations.
|
|
||||||
# Available settings are the same for all of them.
|
|
||||||
# - off disables the animation.
|
|
||||||
#
|
|
||||||
# Niri supports two animation types: easing and spring.
|
|
||||||
# You can set properties for only ONE of them.
|
|
||||||
#
|
|
||||||
# Easing has the following settings:
|
|
||||||
# - duration-ms sets the duration of the animation in milliseconds.
|
|
||||||
# - curve sets the easing curve. Currently, available curves
|
|
||||||
# are "ease-out-cubic" and "ease-out-expo".
|
|
||||||
#
|
|
||||||
# Spring animations work better with touchpad gestures, because they
|
|
||||||
# take into account the velocity of your fingers as you release the swipe.
|
|
||||||
# The parameters are less obvious and generally should be tuned
|
|
||||||
# with trial and error. Notably, you cannot directly set the duration.
|
|
||||||
# You can use this app to help visualize how the spring parameters
|
|
||||||
# change the animation: https://flathub.org/apps/app.drey.Elastic
|
|
||||||
#
|
|
||||||
# A spring animation is configured like this:
|
|
||||||
# - (leaf "spring" { damping-ratio=1.0; stiffness=1000; epsilon=0.0001; })
|
|
||||||
#
|
|
||||||
# The damping ratio goes from 0.1 to 10.0 and has the following properties:
|
|
||||||
# - below 1.0: underdamped spring, will oscillate in the end.
|
|
||||||
# - above 1.0: overdamped spring, won't oscillate.
|
|
||||||
# - 1.0: critically damped spring, comes to rest in minimum possible time
|
|
||||||
# without oscillations.
|
|
||||||
#
|
|
||||||
# However, even with damping ratio = 1.0 the spring animation may oscillate
|
|
||||||
# if "launched" with enough velocity from a touchpad swipe.
|
|
||||||
#
|
|
||||||
# Lower stiffness will result in a slower animation more prone to oscillation.
|
|
||||||
#
|
|
||||||
# Set epsilon to a lower value if the animation "jumps" in the end.
|
|
||||||
#
|
|
||||||
# The spring mass is hardcoded to 1.0 and cannot be changed. Instead, change
|
|
||||||
# stiffness proportionally. E.g. increasing mass by 2x is the same as
|
|
||||||
# decreasing stiffness by 2x.
|
|
||||||
|
|
||||||
# Animation when switching workspaces up and down,
|
|
||||||
# including after the touchpad gesture.
|
|
||||||
(plain "workspace-switch" [
|
|
||||||
# (flag "off")
|
|
||||||
# (leaf "spring" { damping-ratio=1.0; stiffness=1000; epsilon=0.0001; })
|
|
||||||
])
|
|
||||||
|
|
||||||
# All horizontal camera view movement:
|
|
||||||
# - When a window off-screen is focused and the camera scrolls to it.
|
|
||||||
# - When a new window appears off-screen and the camera scrolls to it.
|
|
||||||
# - When a window resizes bigger and the camera scrolls to show it in full.
|
|
||||||
# - And so on.
|
|
||||||
(plain "horizontal-view-movement" [
|
|
||||||
# (flag "off")
|
|
||||||
# (leaf "spring" { damping-ratio=1.0; stiffness=800; epsilon=0.0001; })
|
|
||||||
])
|
|
||||||
|
|
||||||
# Window opening animation. Note that this one has different defaults.
|
|
||||||
(plain "window-open" [
|
|
||||||
# (flag "off")
|
|
||||||
# (leaf "duration-ms" 150)
|
|
||||||
# (leaf "curve" "ease-out-expo")
|
|
||||||
|
|
||||||
# Example for a slightly bouncy window opening:
|
|
||||||
# (leaf "spring" { damping-ratio=0.8; stiffness=1000; epsilon=0.0001; })
|
|
||||||
])
|
|
||||||
|
|
||||||
# Config parse error and new default config creation notification
|
|
||||||
# open/close animation.
|
|
||||||
(plain "config-notification-open-close" [
|
|
||||||
# (flag "off")
|
|
||||||
# (leaf "spring" { damping-ratio=0.6; stiffness=1000; epsilon=0.001; })
|
|
||||||
])
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
niri: {
|
|
||||||
programs.niri.config =
|
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
# Add lines like this to spawn processes at startup.
|
|
||||||
# Note that running niri as a session supports xdg-desktop-autostart,
|
|
||||||
# which may be more convenient to use.
|
|
||||||
# --------------- Terminal ---------------
|
|
||||||
(leaf "spawn-at-startup" [ "foot" ])
|
|
||||||
(leaf "spawn-at-startup" [ "alacritty" ])
|
|
||||||
(leaf "spawn-at-startup" [ "ghostty" ])
|
|
||||||
# --------------- Networking ---------------
|
|
||||||
(leaf "spawn-at-startup" [ "clash-verge" ])
|
|
||||||
# --------------- Browser ---------------
|
|
||||||
(leaf "spawn-at-startup" [ "firefox" ])
|
|
||||||
(leaf "spawn-at-startup" [ "google-chrome-stable" ])
|
|
||||||
(leaf "spawn-at-startup" [ "chromium-browser" ])
|
|
||||||
# --------------- Chatting ---------------
|
|
||||||
(leaf "spawn-at-startup" [ "Telegram" ])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
niri: {
|
|
||||||
programs.niri.config =
|
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
# ============= Window Rules =============
|
|
||||||
# Get all the window's information via:
|
|
||||||
# niri msg windows
|
|
||||||
|
|
||||||
# --------------- 1Terminal ---------------
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "foot"; })
|
|
||||||
(leaf "open-on-workspace" "1terminal")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "Alacritty"; })
|
|
||||||
(leaf "open-on-workspace" "1terminal")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "com.mitchellh.ghostty"; })
|
|
||||||
(leaf "open-on-workspace" "1terminal")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
|
|
||||||
# --------------- 2Browser ---------------
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "firefox"; })
|
|
||||||
(leaf "open-on-workspace" "2browser")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "google-chrome"; })
|
|
||||||
(leaf "open-on-workspace" "2browser")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "chromium-browser"; })
|
|
||||||
(leaf "open-on-workspace" "2browser")
|
|
||||||
(leaf "open-maximized" true)
|
|
||||||
])
|
|
||||||
|
|
||||||
# --------------- 3Chatting ---------------
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "org.telegram.desktop"; })
|
|
||||||
(leaf "open-on-workspace" "3chat")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "wechat"; })
|
|
||||||
(leaf "open-on-workspace" "3chat")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "QQ"; })
|
|
||||||
(leaf "open-on-workspace" "3chat")
|
|
||||||
])
|
|
||||||
|
|
||||||
# --------------- 4Gaming ---------------
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "steam"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "steam_app_default"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "heroic"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "net.lutris.Lutris"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "com.vysp3r.ProtonPlus"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
# Run anime games on Linux
|
|
||||||
(leaf "match" { app-id = "^moe.launcher"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
# All *.exe (Windows APPs)
|
|
||||||
(leaf "match" { app-id = "\.exe$"; })
|
|
||||||
(leaf "open-on-workspace" "4gaming")
|
|
||||||
])
|
|
||||||
|
|
||||||
# --------------- 6File ---------------
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "com.github.johnfactotum.Foliate"; })
|
|
||||||
(leaf "open-on-workspace" "6file")
|
|
||||||
])
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "thunar"; })
|
|
||||||
(leaf "open-on-workspace" "6file")
|
|
||||||
])
|
|
||||||
|
|
||||||
# --------------- 0Other ---------------
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "clash-verge"; })
|
|
||||||
(leaf "open-on-workspace" "0other")
|
|
||||||
])
|
|
||||||
|
|
||||||
(plain "window-rule" [
|
|
||||||
(leaf "match" { app-id = "Zoom Workplace"; })
|
|
||||||
(leaf "open-on-workspace" "0other")
|
|
||||||
])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
{
|
{
|
||||||
pkgs-unstable,
|
lib,
|
||||||
|
pkgs,
|
||||||
nixos-apple-silicon,
|
nixos-apple-silicon,
|
||||||
my-asahi-firmware,
|
my-asahi-firmware,
|
||||||
|
nixpkgs-mesa,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -9,7 +11,25 @@
|
|||||||
nixos-apple-silicon.nixosModules.default
|
nixos-apple-silicon.nixosModules.default
|
||||||
];
|
];
|
||||||
|
|
||||||
environment.systemPackages = with pkgs-unstable; [
|
zramSwap.memoryPercent = lib.mkForce 75;
|
||||||
|
|
||||||
|
# Workaround for Mesa 25.3.1 regression
|
||||||
|
# https://github.com/nix-community/nixos-apple-silicon/issues/380
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/461866
|
||||||
|
hardware.graphics.package =
|
||||||
|
assert pkgs.mesa.version == "25.3.1";
|
||||||
|
(import nixpkgs-mesa { localSystem = pkgs.stdenv.hostPlatform; }).mesa;
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
extra-substituters = [
|
||||||
|
"https://nixos-apple-silicon.cachix.org"
|
||||||
|
];
|
||||||
|
extra-trusted-public-keys = [
|
||||||
|
"nixos-apple-silicon.cachix.org-1:8psDu5SA5dAD7qA0zMy5UT292TxeEPzIz8VVEr2Js20="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
box64 # Linux Userspace x86 and x86_64 Emulator, run x86_64 apps(such as games, gui apps) on aarch64.
|
box64 # Linux Userspace x86 and x86_64 Emulator, run x86_64 apps(such as games, gui apps) on aarch64.
|
||||||
# https://asahilinux.org/2024/12/muvm-x11-bridging/
|
# https://asahilinux.org/2024/12/muvm-x11-bridging/
|
||||||
# https://github.com/nix-community/nixos-apple-silicon/issues/237
|
# https://github.com/nix-community/nixos-apple-silicon/issues/237
|
||||||
@@ -57,7 +77,7 @@
|
|||||||
# After adding this snippet, you need to restart the system for the touchbar to work.
|
# After adding this snippet, you need to restart the system for the touchbar to work.
|
||||||
hardware.apple.touchBar = {
|
hardware.apple.touchBar = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.tiny-dfr;
|
package = pkgs.tiny-dfr;
|
||||||
# https://github.com/WhatAmISupposedToPutHere/tiny-dfr/blob/master/share/tiny-dfr/config.toml
|
# https://github.com/WhatAmISupposedToPutHere/tiny-dfr/blob/master/share/tiny-dfr/config.toml
|
||||||
settings = {
|
settings = {
|
||||||
# F{number} keys are shown when Fn is not pressed by default.
|
# F{number} keys are shown when Fn is not pressed by default.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{ config, niri, ... }:
|
{ config, ... }:
|
||||||
let
|
let
|
||||||
hostName = "shoukei"; # Define your hostname.
|
hostName = "shoukei"; # Define your hostname.
|
||||||
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
programs.ssh.matchBlocks."github.com".identityFile =
|
programs.ssh.matchBlocks."github.com".identityFile =
|
||||||
@@ -11,44 +12,6 @@ in
|
|||||||
"${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/hypr-hardware.conf"
|
"${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/hypr-hardware.conf"
|
||||||
];
|
];
|
||||||
|
|
||||||
modules.desktop.niri = {
|
xdg.configFile."niri/niri-hardware.kdl".source =
|
||||||
settings =
|
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/12kingdoms-shoukei/niri-hardware.kdl";
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
(node "output" "eDP-1" [
|
|
||||||
(leaf "scale" 1.5)
|
|
||||||
(leaf "transform" "normal")
|
|
||||||
(leaf "mode" "2560x1600@60")
|
|
||||||
(leaf "position" {
|
|
||||||
x = 0;
|
|
||||||
y = 0;
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
# ============= Named Workspaces =============
|
|
||||||
(node "workspace" "1terminal" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "2browser" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "3chat" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "4music" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "5mail" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "6file" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
(node "workspace" "0other" [ (leaf "open-on-output" "eDP-1") ])
|
|
||||||
|
|
||||||
# Settings for debugging. Not meant for normal use.
|
|
||||||
# These can change or stop working at any point with little notice.
|
|
||||||
(plain "debug" [
|
|
||||||
# Override the DRM device that niri will use for all rendering.
|
|
||||||
# Fix: niri fails to correctly detect the primary render device
|
|
||||||
(leaf "render-drm-device" "/dev/dri/renderD128")
|
|
||||||
])
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
output "eDP-1" {
|
||||||
|
scale 1.500000
|
||||||
|
transform "normal"
|
||||||
|
mode "2560x1600@60"
|
||||||
|
position x=0 y=0
|
||||||
|
}
|
||||||
|
workspace "1terminal" { open-on-output "eDP-1"; }
|
||||||
|
workspace "2browser" { open-on-output "eDP-1"; }
|
||||||
|
workspace "3chat" { open-on-output "eDP-1"; }
|
||||||
|
workspace "4music" { open-on-output "eDP-1"; }
|
||||||
|
workspace "5mail" { open-on-output "eDP-1"; }
|
||||||
|
workspace "6file" { open-on-output "eDP-1"; }
|
||||||
|
workspace "0other" { open-on-output "eDP-1"; }
|
||||||
|
debug { render-drm-device "/dev/dri/renderD128"; }
|
||||||
|
|
||||||
@@ -1,19 +1,14 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
nixpkgs-ollama,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
pkgs-ollama = import nixpkgs-ollama {
|
|
||||||
inherit (pkgs) system;
|
|
||||||
# To use cuda, we need to allow the installation of non-free software
|
|
||||||
config.allowUnfree = true;
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
services.ollama = rec {
|
services.ollama = rec {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-ollama.ollama;
|
package = pkgs.ollama;
|
||||||
acceleration = "cuda";
|
acceleration = "cuda";
|
||||||
host = "0.0.0.0";
|
host = "0.0.0.0";
|
||||||
port = 11434;
|
port = 11434;
|
||||||
|
|||||||
@@ -69,5 +69,5 @@ in
|
|||||||
# this value at the release version of the first install of this system.
|
# this value at the release version of the first install of this system.
|
||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "25.05"; # Did you read the comment?
|
system.stateVersion = "25.11"; # Did you read the comment?
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-68
@@ -1,4 +1,7 @@
|
|||||||
{ config, niri, ... }:
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
|
||||||
|
|
||||||
@@ -7,71 +10,6 @@
|
|||||||
modules.desktop.hyprland.settings.source = [
|
modules.desktop.hyprland.settings.source = [
|
||||||
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
|
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
|
||||||
];
|
];
|
||||||
|
xdg.configFile."niri/niri-hardware.kdl".source =
|
||||||
modules.desktop.niri = {
|
mkSymlink "${config.home.homeDirectory}/nix-config/hosts/idols-ai/niri-hardware.kdl";
|
||||||
settings =
|
|
||||||
let
|
|
||||||
inherit (niri.lib.kdl)
|
|
||||||
node
|
|
||||||
plain
|
|
||||||
leaf
|
|
||||||
flag
|
|
||||||
;
|
|
||||||
in
|
|
||||||
[
|
|
||||||
# running `niri msg outputs` to find outputs
|
|
||||||
(node "output" "DP-2" [
|
|
||||||
# Uncomment this line to disable this output.
|
|
||||||
# (flag "off")
|
|
||||||
|
|
||||||
# Scale is a floating-point number, but at the moment only integer values work.
|
|
||||||
(leaf "scale" 1.5)
|
|
||||||
|
|
||||||
# Transform allows to rotate the output counter-clockwise, valid values are:
|
|
||||||
# normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
|
||||||
(leaf "transform" "normal")
|
|
||||||
|
|
||||||
# Resolution and, optionally, refresh rate of the output.
|
|
||||||
# The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
|
||||||
# If the refresh rate is omitted, niri will pick the highest refresh rate
|
|
||||||
# for the resolution.
|
|
||||||
# If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
|
||||||
# Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
|
||||||
(leaf "mode" "3840x2160@144")
|
|
||||||
|
|
||||||
# Position of the output in the global coordinate space.
|
|
||||||
# This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
|
||||||
# The cursor can only move between directly adjacent outputs.
|
|
||||||
# Output scale has to be taken into account for positioning:
|
|
||||||
# outputs are sized in logical, or scaled, pixels.
|
|
||||||
# For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
|
||||||
# so to put another output directly adjacent to it on the right, set its x to 1920.
|
|
||||||
# It the position is unset or results in an overlap, the output is instead placed
|
|
||||||
# automatically.
|
|
||||||
(leaf "position" {
|
|
||||||
x = 0;
|
|
||||||
y = 0;
|
|
||||||
})
|
|
||||||
])
|
|
||||||
(node "output" "HDMI-A-1" [
|
|
||||||
(leaf "scale" 1.5)
|
|
||||||
(leaf "transform" "normal")
|
|
||||||
(leaf "mode" "3840x2160@60")
|
|
||||||
(leaf "position" {
|
|
||||||
x = 2560; # on the right of DP-2
|
|
||||||
y = 0;
|
|
||||||
})
|
|
||||||
])
|
|
||||||
|
|
||||||
# ============= Named Workspaces =============
|
|
||||||
(node "workspace" "2browser" [ (leaf "open-on-output" "DP-2") ])
|
|
||||||
(node "workspace" "4gaming" [ (leaf "open-on-output" "DP-2") ])
|
|
||||||
(node "workspace" "5music" [ (leaf "open-on-output" "DP-2") ])
|
|
||||||
|
|
||||||
(node "workspace" "1terminal" [ (leaf "open-on-output" "HDMI-A-1") ])
|
|
||||||
(node "workspace" "3chat" [ (leaf "open-on-output" "HDMI-A-1") ])
|
|
||||||
(node "workspace" "6file" [ (leaf "open-on-output" "HDMI-A-1") ])
|
|
||||||
(node "workspace" "0other" [ (leaf "open-on-output" "HDMI-A-1") ])
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
// running `niri msg outputs` to find outputs
|
||||||
|
output "DP-2" {
|
||||||
|
// Uncomment this line to disable this output.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Scale is a floating-point number, but at the moment only integer values work.
|
||||||
|
scale 1.5
|
||||||
|
|
||||||
|
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||||
|
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||||
|
transform "normal"
|
||||||
|
|
||||||
|
// Resolution and, optionally, refresh rate of the output.
|
||||||
|
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||||
|
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||||
|
// for the resolution.
|
||||||
|
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||||
|
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||||
|
mode "3840x2160@144"
|
||||||
|
|
||||||
|
// Position of the output in the global coordinate space.
|
||||||
|
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||||
|
// The cursor can only move between directly adjacent outputs.
|
||||||
|
// Output scale has to be taken into account for positioning:
|
||||||
|
// outputs are sized in logical, or scaled, pixels.
|
||||||
|
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||||
|
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||||
|
// It the position is unset or results in an overlap, the output is instead placed
|
||||||
|
// automatically.
|
||||||
|
position x=0 y=0
|
||||||
|
}
|
||||||
|
output "HDMI-A-1" {
|
||||||
|
scale 1.5
|
||||||
|
transform "normal"
|
||||||
|
mode "3840x2160@60"
|
||||||
|
position x=2560 y=0 // on the right of DP-2
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============= Named Workspaces =============
|
||||||
|
workspace "2browser" { open-on-output "DP-2"; }
|
||||||
|
workspace "4gaming" { open-on-output "DP-2"; }
|
||||||
|
workspace "5music" { open-on-output "DP-2"; }
|
||||||
|
|
||||||
|
workspace "1terminal" { open-on-output "HDMI-A-1"; }
|
||||||
|
workspace "3chat" { open-on-output "HDMI-A-1"; }
|
||||||
|
workspace "6file" { open-on-output "HDMI-A-1"; }
|
||||||
|
workspace "0other" { open-on-output "HDMI-A-1"; }
|
||||||
@@ -149,6 +149,9 @@ in
|
|||||||
".local/share/nvim"
|
".local/share/nvim"
|
||||||
".local/state/nvim"
|
".local/state/nvim"
|
||||||
|
|
||||||
|
# helix & steel
|
||||||
|
".local/share/steel"
|
||||||
|
|
||||||
# doom-emacs
|
# doom-emacs
|
||||||
# "org" # org files
|
# "org" # org files
|
||||||
# ".config/emacs"
|
# ".config/emacs"
|
||||||
@@ -318,7 +321,7 @@ in
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
file = ".claude.json";
|
file = ".claude.json";
|
||||||
how = "symlink";
|
how = "bindmount";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/misc/gitea.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/misc/gitea.nix
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = "gitea";
|
user = "gitea";
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
ENABLED = true;
|
ENABLED = true;
|
||||||
MAILER_TYPE = "sendmail";
|
MAILER_TYPE = "sendmail";
|
||||||
FROM = "do-not-reply@writefor.fun";
|
FROM = "do-not-reply@writefor.fun";
|
||||||
SENDMAIL_PATH = "${pkgs.system-sendmail}/bin/sendmail";
|
SENDMAIL_PATH = "${pkgs.stdenv.hostPlatform.system-sendmail}/bin/sendmail";
|
||||||
};
|
};
|
||||||
other = {
|
other = {
|
||||||
SHOW_FOOTER_VERSION = false;
|
SHOW_FOOTER_VERSION = false;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ let
|
|||||||
configDir = "/data/apps/minio/config";
|
configDir = "/data/apps/minio/config";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/web-servers/minio.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/web-servers/minio.nix
|
||||||
services.minio = {
|
services.minio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
browser = true; # Enable or disable access to web UI.
|
browser = true; # Enable or disable access to web UI.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ in
|
|||||||
chown -R ${user}:${user} ${configDir}
|
chown -R ${user}:${user} ${configDir}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/virtualisation/oci-containers.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/virtualisation/oci-containers.nix
|
||||||
virtualisation.oci-containers.containers = {
|
virtualisation.oci-containers.containers = {
|
||||||
# check its logs via `journalctl -u podman-homepage`
|
# check its logs via `journalctl -u podman-homepage`
|
||||||
homepage = {
|
homepage = {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ in
|
|||||||
"d ${dataDir} 0755 ${user} ${user}"
|
"d ${dataDir} 0755 ${user} ${user}"
|
||||||
];
|
];
|
||||||
|
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/virtualisation/oci-containers.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/virtualisation/oci-containers.nix
|
||||||
virtualisation.oci-containers.containers = {
|
virtualisation.oci-containers.containers = {
|
||||||
# check its logs via `journalctl -u podman-homepage`
|
# check its logs via `journalctl -u podman-homepage`
|
||||||
uptime-kuma = {
|
uptime-kuma = {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/monitoring/prometheus/exporters/v2ray.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/monitoring/prometheus/exporters/v2ray.nix
|
||||||
# https://github.com/wi1dcard/v2ray-exporter
|
# https://github.com/wi1dcard/v2ray-exporter
|
||||||
services.prometheus.exporters.v2ray = {
|
services.prometheus.exporters.v2ray = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ let
|
|||||||
rcloneConfigFile = "/etc/agenix/rclone-conf-for-restic-backup";
|
rcloneConfigFile = "/etc/agenix/rclone-conf-for-restic-backup";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/backup/restic.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/backup/restic.nix
|
||||||
services.restic.backups = {
|
services.restic.backups = {
|
||||||
homelab-backup = {
|
homelab-backup = {
|
||||||
inherit passwordFile;
|
inherit passwordFile;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
# the headless Transmission BitTorrent daemon
|
# the headless Transmission BitTorrent daemon
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/torrent/transmission.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/torrent/transmission.nix
|
||||||
# https://wiki.archlinux.org/title/transmission
|
# https://wiki.archlinux.org/title/transmission
|
||||||
services.transmission = {
|
services.transmission = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -6,14 +6,18 @@
|
|||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# core tools
|
# core tools
|
||||||
tealdeer # a very fast version of tldr
|
nushell # nushell
|
||||||
fastfetch
|
fastfetch
|
||||||
neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||||
just # justfile
|
gnumake # Makefile
|
||||||
nushell # nushell
|
just # a command runner like gnumake, but simpler
|
||||||
git # used by nix flakes
|
git # used by nix flakes
|
||||||
git-lfs # used by huggingface models
|
git-lfs # used by huggingface models
|
||||||
|
|
||||||
|
# system monitoring
|
||||||
|
procs # a moreden ps
|
||||||
|
btop
|
||||||
|
|
||||||
# archives
|
# archives
|
||||||
zip
|
zip
|
||||||
xz
|
xz
|
||||||
@@ -24,21 +28,49 @@
|
|||||||
# Text Processing
|
# Text Processing
|
||||||
# Docs: https://github.com/learnbyexample/Command-line-text-processing
|
# Docs: https://github.com/learnbyexample/Command-line-text-processing
|
||||||
gnugrep # GNU grep, provides `grep`/`egrep`/`fgrep`
|
gnugrep # GNU grep, provides `grep`/`egrep`/`fgrep`
|
||||||
gnused # GNU sed, very powerful(mainly for replacing text in files)
|
|
||||||
gawk # GNU awk, a pattern scanning and processing language
|
gawk # GNU awk, a pattern scanning and processing language
|
||||||
|
gnutar
|
||||||
|
gnused # GNU sed, very powerful(mainly for replacing text in files)
|
||||||
|
sad # CLI search and replace, just like sed, but with diff preview.
|
||||||
|
|
||||||
jq # A lightweight and flexible command-line JSON processor
|
jq # A lightweight and flexible command-line JSON processor
|
||||||
|
yq-go # yaml processor https://github.com/mikefarah/yq
|
||||||
|
jc # converts the output of popular cli tools & file-types to JSON, YAML
|
||||||
|
|
||||||
|
# Interactively filter its input using fuzzy searching, not limit to filenames.
|
||||||
|
fzf
|
||||||
|
# search for files by name, faster than find
|
||||||
|
fd
|
||||||
|
findutils
|
||||||
|
# search for files by its content, replacement of grep
|
||||||
|
(ripgrep.override { withPCRE2 = true; })
|
||||||
|
|
||||||
|
duf # Disk Usage/Free Utility - a better 'df' alternative
|
||||||
|
dust # A more intuitive version of `du` in rust
|
||||||
|
gdu # disk usage analyzer(replacement of `du`)
|
||||||
|
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
|
||||||
|
|
||||||
# networking tools
|
# networking tools
|
||||||
mtr # A network diagnostic tool
|
mtr # A network diagnostic tool(traceroute)
|
||||||
iperf3
|
gping # ping, but with a graph(TUI)
|
||||||
dnsutils # `dig` + `nslookup`
|
dnsutils # `dig` + `nslookup`
|
||||||
ldns # replacement of `dig`, it provide the command `drill`
|
ldns # replacement of `dig`, it provide the command `drill`
|
||||||
|
doggo # DNS client for humans
|
||||||
wget
|
wget
|
||||||
curl
|
curl
|
||||||
|
curlie # curl with httpie
|
||||||
|
httpie
|
||||||
aria2 # A lightweight multi-protocol & multi-source command-line download utility
|
aria2 # A lightweight multi-protocol & multi-source command-line download utility
|
||||||
socat # replacement of openbsd-netcat
|
socat # replacement of openbsd-netcat
|
||||||
nmap # A utility for network discovery and security auditing
|
nmap # A utility for network discovery and security auditing
|
||||||
ipcalc # it is a calculator for the IPv4/v6 addresses
|
ipcalc # it is a calculator for the IPv4/v6 addresses
|
||||||
|
iperf3 # network performance test
|
||||||
|
hyperfine # command-line benchmarking tool
|
||||||
|
tcpdump # network sniffer
|
||||||
|
|
||||||
|
# file transfer
|
||||||
|
rsync
|
||||||
|
croc # File transfer between computers securely and easily
|
||||||
|
|
||||||
# security
|
# security
|
||||||
libargon2
|
libargon2
|
||||||
@@ -46,10 +78,8 @@
|
|||||||
|
|
||||||
# misc
|
# misc
|
||||||
file
|
file
|
||||||
findutils
|
|
||||||
which
|
which
|
||||||
tree
|
tree
|
||||||
gnutar
|
tealdeer # a very fast version of tldr
|
||||||
rsync
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
##########################################################################
|
##########################################################################
|
||||||
@@ -95,7 +94,7 @@ in
|
|||||||
programs.zsh.enable = true;
|
programs.zsh.enable = true;
|
||||||
environment.shells = [
|
environment.shells = [
|
||||||
pkgs.zsh
|
pkgs.zsh
|
||||||
pkgs-unstable.nushell # my custom shell
|
pkgs.nushell # my custom shell
|
||||||
];
|
];
|
||||||
|
|
||||||
# homebrew need to be installed manually, see https://brew.sh
|
# homebrew need to be installed manually, see https://brew.sh
|
||||||
@@ -130,7 +129,6 @@ in
|
|||||||
"wget" # download tool
|
"wget" # download tool
|
||||||
"curl" # no not install curl via nixpkgs, it's not working well on macOS!
|
"curl" # no not install curl via nixpkgs, it's not working well on macOS!
|
||||||
"aria2" # download tool
|
"aria2" # download tool
|
||||||
"httpie" # http client
|
|
||||||
"wireguard-tools" # wireguard
|
"wireguard-tools" # wireguard
|
||||||
|
|
||||||
# Usage:
|
# Usage:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
# enable the node exporter on all nixos hosts
|
# enable the node exporter on all nixos hosts
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/monitoring/prometheus/exporters/node.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/monitoring/prometheus/exporters/node.nix
|
||||||
services.prometheus.exporters.node = {
|
services.prometheus.exporters.node = {
|
||||||
enable = true;
|
enable = true;
|
||||||
listenAddress = "0.0.0.0";
|
listenAddress = "0.0.0.0";
|
||||||
|
|||||||
@@ -8,9 +8,4 @@
|
|||||||
# dynamically update /etc/hosts for testing
|
# dynamically update /etc/hosts for testing
|
||||||
# Note that changes made in this way will be discarded when switching configurations.
|
# Note that changes made in this way will be discarded when switching configurations.
|
||||||
environment.etc.hosts.mode = "0644";
|
environment.etc.hosts.mode = "0644";
|
||||||
|
|
||||||
networking.hosts."127.0.0.1" = [
|
|
||||||
# Block this domain to prevent QQ from auto-updating.
|
|
||||||
"qqpatch.gtimg.cn"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
determinate,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
@@ -12,11 +11,6 @@
|
|||||||
# https://lix.systems/add-to-config/
|
# https://lix.systems/add-to-config/
|
||||||
# nix.package = pkgs.lix;
|
# nix.package = pkgs.lix;
|
||||||
|
|
||||||
# we use determinate nix instead
|
|
||||||
imports = [
|
|
||||||
determinate.nixosModules.default
|
|
||||||
];
|
|
||||||
|
|
||||||
# to install chrome, you need to enable unfree packages
|
# to install chrome, you need to enable unfree packages
|
||||||
nixpkgs.config.allowUnfree = lib.mkForce true;
|
nixpkgs.config.allowUnfree = lib.mkForce true;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
# system call monitoring
|
# system call monitoring
|
||||||
strace # system call monitoring
|
strace # system call monitoring
|
||||||
ltrace # library call monitoring
|
ltrace # library call monitoring
|
||||||
tcpdump # network sniffer
|
|
||||||
lsof # list open files
|
lsof # list open files
|
||||||
|
|
||||||
# ebpf related tools
|
# ebpf related tools
|
||||||
@@ -19,9 +18,9 @@
|
|||||||
sysstat
|
sysstat
|
||||||
iotop-c
|
iotop-c
|
||||||
iftop
|
iftop
|
||||||
btop
|
|
||||||
nmon
|
nmon
|
||||||
sysbench
|
sysbench
|
||||||
|
systemctl-tui
|
||||||
|
|
||||||
# system tools
|
# system tools
|
||||||
psmisc # killall/pstree/prtstat/fuser/...
|
psmisc # killall/pstree/prtstat/fuser/...
|
||||||
|
|||||||
@@ -15,6 +15,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Add terminfo database of all known terminals to the system profile.
|
# Add terminfo database of all known terminals to the system profile.
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/config/terminfo.nix
|
||||||
environment.enableAllTerminfo = true;
|
environment.enableAllTerminfo = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,33 @@
|
|||||||
# Priority of the zram swap devices.
|
# Priority of the zram swap devices.
|
||||||
# It should be a number higher than the priority of your disk-based swap devices
|
# It should be a number higher than the priority of your disk-based swap devices
|
||||||
# (so that the system will fill the zram swap devices before falling back to disk swap).
|
# (so that the system will fill the zram swap devices before falling back to disk swap).
|
||||||
priority = 5;
|
priority = 100;
|
||||||
# Maximum total amount of memory that can be stored in the zram swap devices (as a percentage of your total memory).
|
# Maximum total amount of memory that can be stored in the zram swap devices (as a percentage of your total memory).
|
||||||
# Defaults to 1/2 of your total RAM. Run zramctl to check how good memory is compressed.
|
# Defaults to 1/2 of your total RAM. Run zramctl to check how good memory is compressed.
|
||||||
# This doesn’t define how much memory will be used by the zram swap devices.
|
# This doesn’t define how much memory will be used by the zram swap devices.
|
||||||
memoryPercent = 50;
|
memoryPercent = 50;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Optimizing swap on zram
|
||||||
|
boot.kernel.sysctl = {
|
||||||
|
# vm.swappiness - Controls kernel preference for swapping (range: 0-200, default: 60)
|
||||||
|
# For in-memory swap devices like zram/zswap, values above 100 are recommended.
|
||||||
|
"vm.swappiness" = 180;
|
||||||
|
|
||||||
|
# vm.watermark_boost_factor - Controls aggressiveness of memory reclaim (default: 15000)
|
||||||
|
# Setting to 0 disables watermark boost, preventing premature memory reclamation.
|
||||||
|
# This allows fuller memory utilization before the kernel starts reclaiming pages.
|
||||||
|
"vm.watermark_boost_factor" = 0;
|
||||||
|
|
||||||
|
# vm.watermark_scale_factor - Controls kswapd wakeup frequency (range: 1-1000, default: 10)
|
||||||
|
# A higher value triggers background memory reclamation earlier (at 12.5% memory pressure).
|
||||||
|
# Value 125 means kswapd becomes active when free memory drops below 1/125 of total memory,
|
||||||
|
# balancing memory more proactively to prevent sudden swap storms at high swappiness values.
|
||||||
|
"vm.watermark_scale_factor" = 125;
|
||||||
|
|
||||||
|
# vm.page-cluster - Controls swap readahead (range: 0-6, default: 3)
|
||||||
|
# 0 means read only 1 page (2^0) at a time, disabling readahead.
|
||||||
|
# For low-latency devices like zram, readahead hurts performance by fetching unnecessary data.
|
||||||
|
"vm.page-cluster" = 0;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
# nix-ld's nixos module will set default values for `NIX_LD` and `NIX_LD_LIBRARY_PATH` environment variables, so
|
# nix-ld's nixos module will set default values for `NIX_LD` and `NIX_LD_LIBRARY_PATH` environment variables, so
|
||||||
# it can work out of the box:
|
# it can work out of the box:
|
||||||
#
|
#
|
||||||
# - https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/programs/nix-ld.nix#L37-L40
|
# - https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/programs/nix-ld.nix#L37-L40
|
||||||
#
|
#
|
||||||
# You can overwrite `NIX_LD_LIBRARY_PATH` in the environment where you run the non-NixOS binaries to customize the
|
# You can overwrite `NIX_LD_LIBRARY_PATH` in the environment where you run the non-NixOS binaries to customize the
|
||||||
# search path for shared libraries.
|
# search path for shared libraries.
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
defaultFonts = {
|
defaultFonts = {
|
||||||
serif = [
|
serif = [
|
||||||
# 西文: 衬线字体(笔画末端有修饰(衬线)的字体,通常用于印刷。)
|
# 西文: 衬线字体(笔画末端有修饰(衬线)的字体,通常用于印刷。)
|
||||||
"Source Sans 3"
|
"Source Serif 4"
|
||||||
# 中文: 宋体(港台称明體)
|
# 中文: 宋体(港台称明體)
|
||||||
"Source Han Serif SC" # 思源宋体
|
"Source Han Serif SC" # 思源宋体
|
||||||
"Source Han Serif TC"
|
"Source Han Serif TC"
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
# SansSerif 也简写做 Sans, Sans 在法语中就是「without」或者「无」的意思
|
# SansSerif 也简写做 Sans, Sans 在法语中就是「without」或者「无」的意思
|
||||||
sansSerif = [
|
sansSerif = [
|
||||||
# 西文: 无衬线字体(指笔画末端没有修饰(衬线)的字体,通常用于屏幕显示)
|
# 西文: 无衬线字体(指笔画末端没有修饰(衬线)的字体,通常用于屏幕显示)
|
||||||
"Source Serif 4"
|
"Source Sans 3"
|
||||||
# 中文: 黑体
|
# 中文: 黑体
|
||||||
"LXGW WenKai Screen" # 霞鹜文楷 屏幕阅读版
|
"LXGW WenKai Screen" # 霞鹜文楷 屏幕阅读版
|
||||||
"Source Han Sans SC" # 思源黑体
|
"Source Han Sans SC" # 思源黑体
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ in
|
|||||||
programs.gamemode.enable = true;
|
programs.gamemode.enable = true;
|
||||||
|
|
||||||
# run anime games on Linux
|
# run anime games on Linux
|
||||||
# https://github.com/an-anime-team/r
|
# https://github.com/an-anime-team/
|
||||||
networking.mihoyo-telemetry.block = true;
|
networking.mihoyo-telemetry.block = true;
|
||||||
environment.systemPackages = with aagl.packages."x86_64-linux"; [
|
environment.systemPackages = with aagl.packages."x86_64-linux"; [
|
||||||
anime-game-launcher # Genshin: Impact
|
anime-game-launcher # Genshin: Impact
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
{
|
{
|
||||||
config,
|
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
# journalctl --user -u sunshine --since "2 minutes ago"
|
# journalctl --user -u sunshine --since "2 minutes ago"
|
||||||
#
|
#
|
||||||
# References:
|
# References:
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/networking/sunshine.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/networking/sunshine.nix
|
||||||
#
|
#
|
||||||
# ===============================================================================
|
# ===============================================================================
|
||||||
services.sunshine = {
|
services.sunshine = {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
# which is already persistent across reboots(via preservation)
|
# which is already persistent across reboots(via preservation)
|
||||||
#
|
#
|
||||||
# References:
|
# References:
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/networking/tailscale.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.11/nixos/modules/services/networking/tailscale.nix
|
||||||
#
|
#
|
||||||
# =============================================================
|
# =============================================================
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
# https://nixos.wiki/wiki/PipeWire
|
# https://nixos.wiki/wiki/PipeWire
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = pkgs-unstable.pipewire;
|
|
||||||
alsa.enable = true;
|
alsa.enable = true;
|
||||||
alsa.support32Bit = true;
|
alsa.support32Bit = true;
|
||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
@@ -53,7 +52,6 @@
|
|||||||
|
|
||||||
udev.packages = with pkgs; [
|
udev.packages = with pkgs; [
|
||||||
gnome-settings-daemon
|
gnome-settings-daemon
|
||||||
android-udev-rules # required by adb
|
|
||||||
# platformio # udev rules for platformio
|
# platformio # udev rules for platformio
|
||||||
# openocd # required by paltformio, see https://github.com/NixOS/nixpkgs/issues/224895
|
# openocd # required by paltformio, see https://github.com/NixOS/nixpkgs/issues/224895
|
||||||
# openfpgaloader
|
# openfpgaloader
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
# https://github.com/casualsnek/waydroid_script
|
# https://github.com/casualsnek/waydroid_script
|
||||||
# https://github.com/AtaraxiaSjel/nur/tree/master/pkgs/waydroid-script
|
# https://github.com/AtaraxiaSjel/nur/tree/master/pkgs/waydroid-script
|
||||||
# https://wiki.archlinux.org/title/Waydroid#ARM_Apps_Incompatible
|
# https://wiki.archlinux.org/title/Waydroid#ARM_Apps_Incompatible
|
||||||
# nur-ataraxiasjel.packages.${pkgs.system}.waydroid-script
|
# nur-ataraxiasjel.packages.${pkgs.stdenv.hostPlatform.system}.waydroid-script
|
||||||
|
|
||||||
# Need to add [File (in the menu bar) -> Add connection] when start for the first time
|
# Need to add [File (in the menu bar) -> Add connection] when start for the first time
|
||||||
# virt-manager
|
# virt-manager
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{ lib, pkgs, ... }:
|
||||||
{
|
{
|
||||||
xdg.terminal-exec = {
|
xdg.terminal-exec = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -23,6 +23,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
xdg = {
|
||||||
|
autostart.enable = lib.mkDefault true;
|
||||||
|
menus.enable = lib.mkDefault true;
|
||||||
|
mime.enable = lib.mkDefault true;
|
||||||
|
icons.enable = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
xdg.portal = {
|
xdg.portal = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -31,10 +38,7 @@
|
|||||||
# Use xdg-desktop-portal-gtk for every portal interface...
|
# Use xdg-desktop-portal-gtk for every portal interface...
|
||||||
default = [
|
default = [
|
||||||
"gtk"
|
"gtk"
|
||||||
];
|
"gnome"
|
||||||
# except for the secret portal, which is handled by gnome-keyring
|
|
||||||
"org.freedesktop.impl.portal.Secret" = [
|
|
||||||
"gnome-keyring"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -50,6 +54,7 @@
|
|||||||
# ls /run/current-system/sw/share/xdg-desktop-portal/portals/
|
# ls /run/current-system/sw/share/xdg-desktop-portal/portals/
|
||||||
extraPortals = with pkgs; [
|
extraPortals = with pkgs; [
|
||||||
xdg-desktop-portal-gtk # for provides file picker / OpenURI
|
xdg-desktop-portal-gtk # for provides file picker / OpenURI
|
||||||
|
xdg-desktop-portal-gnome # for screensharing
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# List all the just commands
|
||||||
|
default:
|
||||||
|
@just --list
|
||||||
|
|
||||||
|
# Enter a shell session which has all the necessary tools for this flake
|
||||||
|
[linux]
|
||||||
|
test:
|
||||||
|
nix build ".#nixosConfigurations.ai.config.system.build.toplevel" --show-trace --verbose
|
||||||
@@ -2,12 +2,13 @@
|
|||||||
description = "NixOS configuration of Ryan Yin";
|
description = "NixOS configuration of Ryan Yin";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
preservation.url = "github:nix-community/preservation";
|
preservation.url = "github:nix-community/preservation";
|
||||||
nuenv.url = "github:DeterminateSystems/nuenv";
|
nuenv.url = "github:DeterminateSystems/nuenv";
|
||||||
|
|
||||||
nixos-apple-silicon = {
|
nixos-apple-silicon = {
|
||||||
url = "github:nix-community/nixos-apple-silicon/release-2025-05-30";
|
# 2025-10-07 asahi-6.16.8-1
|
||||||
|
url = "github:nix-community/nixos-apple-silicon/24ab28e47b586f741910b3a2f0428f3523a0fff3";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ let
|
|||||||
"hardening/bwraps"
|
"hardening/bwraps"
|
||||||
])
|
])
|
||||||
++ [
|
++ [
|
||||||
inputs.niri.nixosModules.niri
|
|
||||||
{
|
{
|
||||||
modules.desktop.fonts.enable = true;
|
modules.desktop.fonts.enable = true;
|
||||||
modules.desktop.wayland.enable = true;
|
modules.desktop.wayland.enable = true;
|
||||||
|
|||||||
+13
-3
@@ -18,8 +18,13 @@ let
|
|||||||
inherit mylib myvars;
|
inherit mylib myvars;
|
||||||
|
|
||||||
# use unstable branch for some packages to get the latest updates
|
# use unstable branch for some packages to get the latest updates
|
||||||
pkgs-unstable = import inputs.nixpkgs-unstable {
|
# pkgs-unstable = import inputs.nixpkgs-unstable {
|
||||||
inherit system; # refer the `system` parameter form outer scope recursively
|
# inherit system; # refer the `system` parameter form outer scope recursively
|
||||||
|
# # To use chrome, we need to allow the installation of non-free software
|
||||||
|
# config.allowUnfree = true;
|
||||||
|
# };
|
||||||
|
pkgs-2505 = import inputs.nixpkgs-2505 {
|
||||||
|
inherit system;
|
||||||
# To use chrome, we need to allow the installation of non-free software
|
# To use chrome, we need to allow the installation of non-free software
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
@@ -30,7 +35,12 @@ let
|
|||||||
};
|
};
|
||||||
pkgs-patched = import inputs.nixpkgs-patched {
|
pkgs-patched = import inputs.nixpkgs-patched {
|
||||||
inherit system;
|
inherit system;
|
||||||
# To use chrome, we need to allow the installation of non-free software
|
# to use chrome, we need to allow the installation of non-free software
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
pkgs-master = import inputs.nixpkgs-master {
|
||||||
|
inherit system;
|
||||||
|
# to use chrome, we need to allow the installation of non-free software
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ let
|
|||||||
"hardening/bwraps"
|
"hardening/bwraps"
|
||||||
])
|
])
|
||||||
++ [
|
++ [
|
||||||
inputs.niri.nixosModules.niri
|
|
||||||
{
|
{
|
||||||
modules.desktop.fonts.enable = true;
|
modules.desktop.fonts.enable = true;
|
||||||
modules.desktop.wayland.enable = true;
|
modules.desktop.wayland.enable = true;
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
agenix.packages."${pkgs.system}".default
|
agenix.packages."${pkgs.stdenv.hostPlatform.system}".default
|
||||||
];
|
];
|
||||||
|
|
||||||
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ in
|
|||||||
config = mkIf (cfg.desktop.enable || enabledServerSecrets) (mkMerge [
|
config = mkIf (cfg.desktop.enable || enabledServerSecrets) (mkMerge [
|
||||||
{
|
{
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
agenix.packages."${pkgs.system}".default
|
agenix.packages."${pkgs.stdenv.hostPlatform.system}".default
|
||||||
];
|
];
|
||||||
|
|
||||||
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
||||||
|
|||||||
Reference in New Issue
Block a user