Compare commits
No commits in common. "master" and "hyprland" have entirely different histories.
136
flake.lock
136
flake.lock
|
|
@ -10,11 +10,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1775689345,
|
"lastModified": 1764289441,
|
||||||
"narHash": "sha256-tM3s7CX+tgxlYW0Sk3nzVThg2MHn08foIuMxABupxIs=",
|
"narHash": "sha256-ak+lgFiYE5PHByN1/BRkO5JP498hno6Ix24C1Qf/vec=",
|
||||||
"owner": "aylur",
|
"owner": "aylur",
|
||||||
"repo": "ags",
|
"repo": "ags",
|
||||||
"rev": "bbee2f18939f1ec7ff720e717cf305e73635628f",
|
"rev": "e169694390548dfd38ff40f1ef2163d6c3ffe3ea",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -30,11 +30,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783119102,
|
"lastModified": 1769774308,
|
||||||
"narHash": "sha256-bXd034/ARs18ZQ7hWUAw9NwyfBmcKQws8DQHzwYp6jM=",
|
"narHash": "sha256-8Ve6VdUpcYbl8bS5oyDwVnnNobyPxdPmUHGgSDyOazQ=",
|
||||||
"owner": "aylur",
|
"owner": "aylur",
|
||||||
"repo": "astal",
|
"repo": "astal",
|
||||||
"rev": "04454c22094401cc8e682cfe1f8ecc3194cac5f9",
|
"rev": "eb235f8813bdea2a4a38ac228f2efc4e2a8a90af",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -65,6 +65,27 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-parts_2": {
|
"flake-parts_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nur",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733312601,
|
||||||
|
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_3": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs-lib": [
|
||||||
"worktimer",
|
"worktimer",
|
||||||
|
|
@ -111,11 +132,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783963347,
|
"lastModified": 1773093840,
|
||||||
"narHash": "sha256-r376E2XpakiXwModDHIxlvB6qLq4iFVEq730vxOO4JY=",
|
"narHash": "sha256-u/96NoAyN8BSRuM3ZimGf7vyYgXa3pLx4MYWjokuoH4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "a45a7c451455a51ae740ec3bce4024b312809c29",
|
"rev": "bb014746edb2a98d975abde4dd40fa240de4cf86",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -163,11 +184,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783776592,
|
"lastModified": 1772963539,
|
||||||
"narHash": "sha256-UgCQzxeWI75XM8G+hPrPh+MKzEPjG3SpAj7dtqSbksA=",
|
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e7a3ca8092b61ff85b6a45bf863ea2b2d6a661b3",
|
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -178,6 +199,38 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772963539,
|
||||||
|
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1772542754,
|
||||||
|
"narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1730200266,
|
"lastModified": 1730200266,
|
||||||
"narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
|
"narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
|
||||||
|
|
@ -193,6 +246,25 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nur": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_2",
|
||||||
|
"nixpkgs": "nixpkgs_3"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1773125003,
|
||||||
|
"narHash": "sha256-EF89LT3zxm8dM2pgoAohUcdQoTVVv1v02Jq+z6j8u+0=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"rev": "eb59c1e77102b9f836cdea9f12568f191a9aff57",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"ags": "ags",
|
"ags": "ags",
|
||||||
|
|
@ -201,13 +273,49 @@
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixos-06cb-009a-fingerprint-sensor": "nixos-06cb-009a-fingerprint-sensor",
|
"nixos-06cb-009a-fingerprint-sensor": "nixos-06cb-009a-fingerprint-sensor",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"nur": "nur",
|
||||||
|
"vicinae": "vicinae",
|
||||||
"worktimer": "worktimer"
|
"worktimer": "worktimer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vicinae": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_4",
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1773099334,
|
||||||
|
"narHash": "sha256-ciiNQFZ2m2JOEDDg9ZZxOuxykl4Aw/2C1EQsOcq+F+E=",
|
||||||
|
"owner": "vicinaehq",
|
||||||
|
"repo": "vicinae",
|
||||||
|
"rev": "2a427670116461a4ce0207db2c089aee9f40428e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vicinaehq",
|
||||||
|
"repo": "vicinae",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"worktimer": {
|
"worktimer": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts_2",
|
"flake-parts": "flake-parts_3",
|
||||||
"nixpkgs": "nixpkgs_3"
|
"nixpkgs": "nixpkgs_5"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1739738223,
|
"lastModified": 1739738223,
|
||||||
|
|
|
||||||
29
flake.nix
29
flake.nix
|
|
@ -5,7 +5,9 @@
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
nur.url = "github:nix-community/NUR";
|
||||||
fzgo.url = "git+https://git.thomasave.be/thomasave/fzgo.git";
|
fzgo.url = "git+https://git.thomasave.be/thomasave/fzgo.git";
|
||||||
|
vicinae.url = "github:vicinaehq/vicinae";
|
||||||
worktimer = {
|
worktimer = {
|
||||||
type = "git";
|
type = "git";
|
||||||
url = "https://git.thomasave.be/thomasave/WorkTimer";
|
url = "https://git.thomasave.be/thomasave/WorkTimer";
|
||||||
|
|
@ -30,25 +32,35 @@
|
||||||
outputs = {
|
outputs = {
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
home-manager,
|
home-manager,
|
||||||
|
nur,
|
||||||
nixos-06cb-009a-fingerprint-sensor,
|
nixos-06cb-009a-fingerprint-sensor,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
supportedSystems = ["x86_64-linux" "aarch64-linux"];
|
supportedSystems = ["x86_64-linux" "aarch64-linux"];
|
||||||
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||||
|
system = builtins.currentSystem;
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
commonModules = host: user: [
|
commonModules = host: user: [
|
||||||
./hosts/${host}/hardware-configuration.nix
|
./hosts/${host}/hardware-configuration.nix
|
||||||
({pkgs, ...}: {
|
{
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.overlays = [
|
||||||
|
nur.overlays.default
|
||||||
|
(self: super: {utillinux = super.util-linux;})
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
networking.hostName = host;
|
networking.hostName = host;
|
||||||
time.timeZone = "Europe/Brussels";
|
time.timeZone = "Asia/Bangkok";
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
substituters = [
|
substituters = [
|
||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
"https://cuda-maintainers.cachix.org"
|
"https://cuda-maintainers.cachix.org"
|
||||||
|
"https://vicinae.cachix.org"
|
||||||
];
|
];
|
||||||
trusted-public-keys = [
|
trusted-public-keys = [
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
|
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
|
||||||
|
"vicinae.cachix.org-1:1kDrfienkGHPYbkpNj1mWTr7Fm1+zcenzgTizIcI3oc="
|
||||||
];
|
];
|
||||||
experimental-features = ["nix-command" "flakes"];
|
experimental-features = ["nix-command" "flakes"];
|
||||||
trusted-users = ["root" user];
|
trusted-users = ["root" user];
|
||||||
|
|
@ -58,7 +70,7 @@
|
||||||
};
|
};
|
||||||
users.users.${user} = {
|
users.users.${user} = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
extraGroups = ["wheel" "video"]; # Enable 'sudo' for the user.
|
extraGroups = ["wheel" "video"]; # Enable ‘sudo’ for the user.
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKAa3tMzSCRuprEACrBsKI0F/o73o6J9L1qR3TaZn/N8 user@Kell"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKAa3tMzSCRuprEACrBsKI0F/o73o6J9L1qR3TaZn/N8 user@Kell"
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByLwLAdJbmoDV5sx4hg5NbzKbOh1GmWEhDOUJ1GQBhK user@Riva"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByLwLAdJbmoDV5sx4hg5NbzKbOh1GmWEhDOUJ1GQBhK user@Riva"
|
||||||
|
|
@ -73,7 +85,7 @@
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
};
|
};
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
})
|
}
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
home-manager = {
|
home-manager = {
|
||||||
|
|
@ -111,10 +123,7 @@
|
||||||
};
|
};
|
||||||
mkHome = architecture: modulePath:
|
mkHome = architecture: modulePath:
|
||||||
home-manager.lib.homeManagerConfiguration {
|
home-manager.lib.homeManagerConfiguration {
|
||||||
pkgs = import nixpkgs {
|
pkgs = nixpkgs.legacyPackages.${architecture};
|
||||||
system = architecture;
|
|
||||||
config.allowUnfree = true;
|
|
||||||
};
|
|
||||||
modules = [modulePath];
|
modules = [modulePath];
|
||||||
extraSpecialArgs = {inherit inputs;};
|
extraSpecialArgs = {inherit inputs;};
|
||||||
};
|
};
|
||||||
|
|
@ -127,7 +136,7 @@
|
||||||
"user@Tolnedra" = mkHome "x86_64-linux" ./home/Tolnedra.nix;
|
"user@Tolnedra" = mkHome "x86_64-linux" ./home/Tolnedra.nix;
|
||||||
"server@Vault" = mkHome "x86_64-linux" ./home/Vault.nix;
|
"server@Vault" = mkHome "x86_64-linux" ./home/Vault.nix;
|
||||||
"user@Docker" = mkHome "x86_64-linux" ./home/Docker.nix;
|
"user@Docker" = mkHome "x86_64-linux" ./home/Docker.nix;
|
||||||
"server@mallorea" = mkHome "x86_64-linux" ./home/Mallorea.nix;
|
"server@Mallorea" = mkHome "x86_64-linux" ./home/Mallorea.nix;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Generic formatter across architectures
|
# Generic formatter across architectures
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,7 @@
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
(import ./utils/desktop.nix {
|
(import ./utils/desktop.nix {inherit inputs config pkgs;})
|
||||||
inherit inputs config pkgs;
|
|
||||||
scale = 1.2;
|
|
||||||
})
|
|
||||||
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -28,7 +25,6 @@ in {
|
||||||
jetbrains.pycharm
|
jetbrains.pycharm
|
||||||
rclone
|
rclone
|
||||||
opencode
|
opencode
|
||||||
claude-code
|
|
||||||
# zed-editor
|
# zed-editor
|
||||||
uv
|
uv
|
||||||
google-cloud-sdk
|
google-cloud-sdk
|
||||||
|
|
@ -39,14 +35,26 @@ in {
|
||||||
vscode
|
vscode
|
||||||
texliveFull
|
texliveFull
|
||||||
gnome-power-manager
|
gnome-power-manager
|
||||||
|
discord
|
||||||
smile
|
smile
|
||||||
podman-compose
|
podman-compose
|
||||||
vesktop
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
monitor = [
|
||||||
|
"eDP-1,2880x1800@120.00Hz,480x0,1.2,vrr,1"
|
||||||
|
"HDMI-A-1,3840x2160@60.00Hz,0x-2160,1"
|
||||||
|
"DP-3,1920x1080,3840x-540,1"
|
||||||
|
"DP-1,1920x1080,3840x-540,1"
|
||||||
|
];
|
||||||
|
bind = [
|
||||||
|
", XF86PowerOff, exec, ${pkgs.rofi}/bin/rofi -show power-menu -modi power-menu:${
|
||||||
|
./hyprland/files/rofi-power-menu.sh
|
||||||
|
}"
|
||||||
|
];
|
||||||
|
general.gaps_out = 1;
|
||||||
|
};
|
||||||
|
|
||||||
programs.alacritty.settings.font.size = 13;
|
programs.alacritty.settings.font.size = 13;
|
||||||
programs.kitty.font.size = 13;
|
programs.kitty.font.size = 13;
|
||||||
systemd.user.services.vicinae.Service.Environment = [
|
|
||||||
"QT_SCALE_FACTOR=1.5"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,20 +15,13 @@
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
(import ./utils/desktop.nix {
|
(import ./utils/desktop.nix {inherit inputs config pkgs;})
|
||||||
inherit inputs config pkgs;
|
|
||||||
scale = 1.0;
|
|
||||||
})
|
|
||||||
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."*".identityFile = "/home/user/.secrets/SSH/Arendia/id_ed25519";
|
programs.ssh.matchBlocks."*".identityFile = "/home/user/.secrets/SSH/Arendia/id_ed25519";
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
rclone
|
|
||||||
uv
|
|
||||||
claude-code
|
|
||||||
awscli2
|
|
||||||
distrobox
|
distrobox
|
||||||
gnome-disk-utility
|
gnome-disk-utility
|
||||||
moonlight-qt
|
moonlight-qt
|
||||||
|
|
@ -36,15 +29,33 @@ in {
|
||||||
texliveFull
|
texliveFull
|
||||||
gnome-power-manager
|
gnome-power-manager
|
||||||
# jetbrains.pycharm-professional
|
# jetbrains.pycharm-professional
|
||||||
|
discord
|
||||||
smile
|
smile
|
||||||
podman-compose
|
|
||||||
vesktop
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
services.hyprpaper = {
|
||||||
|
settings = {
|
||||||
|
wallpaper = [
|
||||||
|
"HDMI-A-1,${./hyprland/files/wallpaper.png}"
|
||||||
|
"eDP-1,${./hyprland/files/wallpaper.png}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
monitor = [
|
||||||
|
"eDP-1,2560x1440@60.01,0x0,1"
|
||||||
|
"HDMI-A-1,1920x1080@60,0x-1080,1"
|
||||||
|
];
|
||||||
|
bind = [
|
||||||
|
", XF86PowerOff, exec, ${pkgs.rofi}/bin/rofi -show power-menu -modi power-menu:${
|
||||||
|
./hyprland/files/rofi-power-menu.sh
|
||||||
|
}"
|
||||||
|
];
|
||||||
|
general.gaps_out = 1;
|
||||||
|
};
|
||||||
|
|
||||||
programs.alacritty.settings.font.size = 13;
|
programs.alacritty.settings.font.size = 13;
|
||||||
programs.kitty.font.size = 15;
|
programs.kitty.font.size = 15;
|
||||||
programs.foot.settings.main.font = pkgs.lib.mkForce "DejaVu Sans Mono:size=15";
|
programs.foot.settings.main.font = pkgs.lib.mkForce "DejaVu Sans Mono:size=15";
|
||||||
systemd.user.services.vicinae.Service.Environment = [
|
|
||||||
"QT_SCALE_FACTOR=1.2"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,18 @@ in {
|
||||||
moonlight-qt
|
moonlight-qt
|
||||||
vscode
|
vscode
|
||||||
jetbrains.rider
|
jetbrains.rider
|
||||||
|
discord
|
||||||
];
|
];
|
||||||
|
|
||||||
|
services.hyprpaper = {
|
||||||
|
settings = {
|
||||||
|
wallpaper = [
|
||||||
|
"DP-1,${./hyprland/files/wallpaper.png}"
|
||||||
|
"DP-2,${./hyprland/files/wallpaper.png}"
|
||||||
|
"HDMI-A-1,${./hyprland/files/wallpaper.png}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
wayland.windowManager.hyprland.settings = {
|
wayland.windowManager.hyprland.settings = {
|
||||||
monitor = [
|
monitor = [
|
||||||
"DP-2,preferred,0x550,1"
|
"DP-2,preferred,0x550,1"
|
||||||
|
|
|
||||||
|
|
@ -98,9 +98,4 @@ in {
|
||||||
LANG = "en_US.UTF-8";
|
LANG = "en_US.UTF-8";
|
||||||
XDG_RUNTIME_DIR = "/run/user/$(id -u)";
|
XDG_RUNTIME_DIR = "/run/user/$(id -u)";
|
||||||
};
|
};
|
||||||
home.packages = with pkgs; [
|
|
||||||
rclone
|
|
||||||
uv
|
|
||||||
claude-code
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,14 +12,35 @@
|
||||||
dirs = [
|
dirs = [
|
||||||
"/home/user/.dotfiles"
|
"/home/user/.dotfiles"
|
||||||
"/home/server/.cache/fzgo/entries/d/|home|user|Workspace"
|
"/home/server/.cache/fzgo/entries/d/|home|user|Workspace"
|
||||||
|
"/home/server/.cache/fzgo/entries/d/|home|server|Storage|Thomas"
|
||||||
|
"/home/server/.cache/fzgo/entries/d/|home|server|Storage|Shared"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
(import ./utils/common.nix {inherit inputs config pkgs;})
|
|
||||||
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
(import ./utils/fzgo_links.nix {inherit config pkgs fzgo_paths;})
|
||||||
|
(import ./utils/desktop.nix {inherit inputs config pkgs;})
|
||||||
./ssh
|
./ssh
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.ssh.matchBlocks."*".identityFile = "/home/user/.secrets/SSH/Riva/id_ed25519";
|
programs.ssh.matchBlocks."*".identityFile = "/home/user/.secrets/SSH/Riva/id_ed25519";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
distrobox
|
||||||
|
jq
|
||||||
|
rclone
|
||||||
|
];
|
||||||
|
services.hyprpaper = {
|
||||||
|
settings = {
|
||||||
|
wallpaper = [
|
||||||
|
"Virtual-1,${./hyprland/files/wallpaper.png}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
monitor = [
|
||||||
|
"Virtual-1,2560x1440,0x0,1"
|
||||||
|
];
|
||||||
|
input.kb_options = "compose:rctrl, caps:super, altwin:swap_alt_win";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ import { Astal, Gdk, Gtk } from "ags/gtk4";
|
||||||
import app from "ags/gtk4/app";
|
import app from "ags/gtk4/app";
|
||||||
import { createBinding, createState, For, With, Accessor } from "ags";
|
import { createBinding, createState, For, With, Accessor } from "ags";
|
||||||
import { createPoll } from "ags/time";
|
import { createPoll } from "ags/time";
|
||||||
import { subprocess, execAsync } from "ags/process";
|
|
||||||
import Pango from "gi://Pango";
|
|
||||||
import Tray from "gi://AstalTray";
|
import Tray from "gi://AstalTray";
|
||||||
|
import { execAsync } from "ags/process";
|
||||||
|
import Hyprland from "gi://AstalHyprland";
|
||||||
import { getIconName } from "./utils";
|
import { getIconName } from "./utils";
|
||||||
import Wp from "gi://AstalWp";
|
import Wp from "gi://AstalWp";
|
||||||
import Battery from "gi://AstalBattery";
|
import Battery from "gi://AstalBattery";
|
||||||
|
|
@ -16,36 +16,6 @@ const sensorsAvailable = await execAsync(["sensors"])
|
||||||
.catch(() => false);
|
.catch(() => false);
|
||||||
const wirePlumber = Wp.get_default();
|
const wirePlumber = Wp.get_default();
|
||||||
|
|
||||||
// --- NIRI IPC INTEGRATION ---
|
|
||||||
const [workspaces, setWorkspaces] = createState<any[]>([]);
|
|
||||||
const [windows, setWindows] = createState<any[]>([]);
|
|
||||||
|
|
||||||
async function updateNiriState() {
|
|
||||||
try {
|
|
||||||
const wsOut = await execAsync(["niri", "msg", "-j", "workspaces"]);
|
|
||||||
setWorkspaces(JSON.parse(wsOut) || []);
|
|
||||||
|
|
||||||
const winOut = await execAsync(["niri", "msg", "-j", "windows"]);
|
|
||||||
setWindows(JSON.parse(winOut) || []);
|
|
||||||
} catch (e) {
|
|
||||||
console.error("Failed to fetch Niri state:", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize state immediately
|
|
||||||
updateNiriState();
|
|
||||||
|
|
||||||
// Subscribe to Niri's native event stream
|
|
||||||
subprocess(
|
|
||||||
["niri", "msg", "-j", "event-stream"],
|
|
||||||
(line) => {
|
|
||||||
// A state change happened in Niri. Re-fetching guarantees perfect sync
|
|
||||||
updateNiriState();
|
|
||||||
},
|
|
||||||
(err) => console.error("Niri event stream error:", err)
|
|
||||||
);
|
|
||||||
// ----------------------------
|
|
||||||
|
|
||||||
function SysTray(): JSX.Element {
|
function SysTray(): JSX.Element {
|
||||||
const tray = Tray.get_default();
|
const tray = Tray.get_default();
|
||||||
let items = createBinding(tray, "items");
|
let items = createBinding(tray, "items");
|
||||||
|
|
@ -82,18 +52,18 @@ function SysTray(): JSX.Element {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Left({ connector }: { connector: string }): JSX.Element {
|
function Left(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<box hexpand halign={Gtk.Align.START}>
|
<box hexpand halign={Gtk.Align.START}>
|
||||||
<Clients connector={connector} />
|
<Clients />
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Center({ connector }: { connector: string }): JSX.Element {
|
function Center(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<Workspaces connector={connector} />
|
<Workspaces />
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -274,93 +244,108 @@ function Volume(): JSX.Element {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Workspaces({ connector }: { connector: string }): JSX.Element {
|
function Workspaces(): JSX.Element {
|
||||||
|
const hyprland = Hyprland.get_default();
|
||||||
|
let workspaces = createBinding(hyprland, "workspaces");
|
||||||
return (
|
return (
|
||||||
<box class="workspaces">
|
<box class="workspaces">
|
||||||
{/* Generate a derived binding by passing a transformation function into the `workspaces` state */}
|
<With value={workspaces}>
|
||||||
<For each={workspaces((wss: any[]) =>
|
{(wss: Array<Hyprland.Workspace>) => (
|
||||||
wss.filter((ws) => ws.output === connector)
|
<box>
|
||||||
.filter((ws) => ws.is_active || windows().some((w: any) => w.workspace_id === ws.id))
|
<With value={createBinding(hyprland, "focusedMonitor")}>
|
||||||
.sort((a, b) => a.idx - b.idx)
|
{(fm: Hyprland.Monitor) => {
|
||||||
)}>
|
let filtered_wss = new Accessor(() =>
|
||||||
{(ws: any) => (
|
wss
|
||||||
<button
|
.sort((a, b) => a.id - b.id)
|
||||||
class={ws.is_active ? "focused" : ""}
|
.filter(
|
||||||
onClicked={() => execAsync(["niri", "msg", "action", "focus-workspace", ws.idx.toString()])}
|
(ws) =>
|
||||||
>
|
ws &&
|
||||||
{ws.name || ws.idx.toString()}
|
ws.get_monitor() &&
|
||||||
</button>
|
ws.get_monitor().get_id() === fm.get_id(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<box>
|
||||||
|
<For each={filtered_wss}>
|
||||||
|
{(ws: Hyprland.Workspace, _index) => (
|
||||||
|
<button
|
||||||
|
class={createBinding(hyprland, "focusedWorkspace").as(
|
||||||
|
(fw) => (ws === fw ? "focused" : ""),
|
||||||
|
)}
|
||||||
|
onClicked={() => ws.focus()}
|
||||||
|
>
|
||||||
|
{`${ws.id}`.slice(-1)}
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
</For>
|
||||||
|
</box>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</With>
|
||||||
|
</box>
|
||||||
)}
|
)}
|
||||||
</For>
|
</With>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const MAX_TOTAL_CHARS = 120;
|
function shorten(title: string) {
|
||||||
const MIN_TITLE_CHARS = 10;
|
return title.length > 40 ? title.slice(0, 20) + "..." : title;
|
||||||
const OVERHEAD_PER_WINDOW = 5; // icon + padding + margin in character-width equivalents
|
|
||||||
|
|
||||||
function computeTitleBudgets(wins: any[]): any[] {
|
|
||||||
const totalLength = wins.reduce((sum, w) => sum + (w.title || "").length, 0);
|
|
||||||
const count = wins.length;
|
|
||||||
const totalWithOverhead = totalLength + count * OVERHEAD_PER_WINDOW;
|
|
||||||
|
|
||||||
let maxChars: number;
|
|
||||||
if (count === 0 || totalWithOverhead <= MAX_TOTAL_CHARS) {
|
|
||||||
maxChars = -1;
|
|
||||||
} else {
|
|
||||||
const charsAvailable = MAX_TOTAL_CHARS - count * OVERHEAD_PER_WINDOW;
|
|
||||||
maxChars = Math.max(MIN_TITLE_CHARS, Math.floor(charsAvailable / count));
|
|
||||||
}
|
|
||||||
|
|
||||||
return wins.map(w => ({ ...w, maxChars }));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Clients({ connector }: { connector: string }): JSX.Element {
|
function Clients(): JSX.Element {
|
||||||
|
const hyprland = Hyprland.get_default();
|
||||||
|
let clients = createBinding(hyprland, "clients");
|
||||||
return (
|
return (
|
||||||
<box class="clients">
|
<box>
|
||||||
{/* Use With to react to workspace changes, so we know which WS is active */}
|
<With value={createBinding(hyprland, "focusedWorkspace")}>
|
||||||
<With value={workspaces}>
|
{(fw: Hyprland.Workspace) => (
|
||||||
{(wss: any[]) => {
|
<box class="clients">
|
||||||
let active_ws_for_monitor = wss.find((ws: any) => ws.is_active && ws.output === connector)?.id;
|
<With value={clients}>
|
||||||
|
{(cls: Array<Hyprland.Client>) => {
|
||||||
|
let filtered_clients = new Accessor(() =>
|
||||||
|
cls
|
||||||
|
.sort((a, b) => a.pid - b.pid)
|
||||||
|
.filter((cl) => !cl.title.includes("rofi"))
|
||||||
|
.filter(
|
||||||
|
(cl) => fw && cl.get_workspace().get_id() === fw.get_id(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
{/* Generate a derived binding for windows, depending on the active workspace */}
|
<For each={filtered_clients}>
|
||||||
<For each={windows((wins: any[]) =>
|
{(cl: Hyprland.Client, _index) => (
|
||||||
computeTitleBudgets(
|
<box
|
||||||
wins.filter((w: any) => !w.title?.includes("rofi"))
|
class={createBinding(hyprland, "focusedClient").as(
|
||||||
.filter((w: any) => w.workspace_id === active_ws_for_monitor)
|
(a) =>
|
||||||
.sort((a: any, b: any) => {
|
a && a.address === cl.address
|
||||||
const posA = a.layout?.pos_in_scrolling_layout?.[0] ?? 0;
|
? "focused"
|
||||||
const posB = b.layout?.pos_in_scrolling_layout?.[0] ?? 0;
|
: "unfocused",
|
||||||
return posA - posB;
|
)}
|
||||||
})
|
>
|
||||||
)
|
<image iconName={getIconName(cl)} class="app-icon" />
|
||||||
)}>
|
<label
|
||||||
{(win: any) => (
|
label={createBinding(cl, "title").as((title) =>
|
||||||
<box class={win.is_focused ? "focused" : "unfocused"}>
|
shorten(title),
|
||||||
<image iconName={getIconName(win.app_id, win.title)} class="app-icon" />
|
)}
|
||||||
<label
|
/>
|
||||||
label={win.title || ""}
|
</box>
|
||||||
maxWidthChars={win.maxChars}
|
)}
|
||||||
ellipsize={Pango.EllipsizeMode.END}
|
</For>
|
||||||
/>
|
|
||||||
</box>
|
</box>
|
||||||
)}
|
);
|
||||||
</For>
|
}}
|
||||||
</box>
|
</With>
|
||||||
);
|
</box>
|
||||||
}}
|
)}
|
||||||
</With>
|
</With>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Bar(gdkmonitor: Gdk.Monitor, scaleFactor: number = 1) {
|
export default function Bar(gdkmonitor: Gdk.Monitor, scaleFactor: number = 1) {
|
||||||
console.log("Creating Bar on monitor:", gdkmonitor.get_connector());
|
console.log("Creating Bar on monitor:", gdkmonitor);
|
||||||
const connector = gdkmonitor.get_connector() || "";
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<window
|
<window
|
||||||
visible
|
visible
|
||||||
|
|
@ -374,11 +359,11 @@ export default function Bar(gdkmonitor: Gdk.Monitor, scaleFactor: number = 1) {
|
||||||
}
|
}
|
||||||
application={app}
|
application={app}
|
||||||
class="Bar"
|
class="Bar"
|
||||||
name={`top-bar-${connector}`}
|
name="top-bar"
|
||||||
>
|
>
|
||||||
<centerbox class="window-box">
|
<centerbox class="window-box">
|
||||||
<Left $type="start" connector={connector} />
|
<Left $type="start" />
|
||||||
<Center $type="center" connector={connector} />
|
<Center $type="center" />
|
||||||
<Right $type="end" />
|
<Right $type="end" />
|
||||||
</centerbox>
|
</centerbox>
|
||||||
</window>
|
</window>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,60 @@
|
||||||
import app from "ags/gtk4/app";
|
import app from "ags/gtk4/app";
|
||||||
import { Gdk } from "ags/gtk4";
|
|
||||||
import style from "./style.scss";
|
import style from "./style.scss";
|
||||||
import Bar from "./Bar";
|
import Bar from "./Bar";
|
||||||
|
import Hyprland from "gi://AstalHyprland";
|
||||||
import NotificationPopups from "./notifications/NotificationPopups";
|
import NotificationPopups from "./notifications/NotificationPopups";
|
||||||
|
|
||||||
function register_windows(monitor: Gdk.Monitor) {
|
const hyprland = Hyprland.get_default();
|
||||||
let scale = (monitor.get_geometry().width >= 3000) ? 1.2 : 1;
|
|
||||||
Bar(monitor, scale);
|
function find_main_monitor(): Hyprland.Monitor {
|
||||||
|
let monitors = hyprland.get_monitors();
|
||||||
|
for (let j = 0; j < monitors.length; j++) {
|
||||||
|
for (const monitor of ["eDP", "DP", "HDMI-A"]) {
|
||||||
|
for (let i = 0; i < monitors.length; i++) {
|
||||||
|
console.log(
|
||||||
|
"Checking monitor:",
|
||||||
|
monitors[i].get_name(),
|
||||||
|
"against",
|
||||||
|
monitor + "-" + j,
|
||||||
|
);
|
||||||
|
if (monitors[i].get_name() == monitor + "-" + j) {
|
||||||
|
return monitors[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return monitors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
function register_windows(monitor: Hyprland.Monitor) {
|
||||||
|
let gtkMonitor = app.get_monitors()[0];
|
||||||
|
let scale = monitor.get_width() >= 3000 ? 1.2 : 1;
|
||||||
|
Bar(gtkMonitor, scale);
|
||||||
NotificationPopups();
|
NotificationPopups();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function switch_to_best_monitor() {
|
||||||
|
let mainMonitor = find_main_monitor();
|
||||||
|
for (var wd of app.get_windows()) {
|
||||||
|
wd.destroy();
|
||||||
|
}
|
||||||
|
register_windows(mainMonitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
hyprland.connect("monitor-added", (_, _monitor: Hyprland.Monitor) => {
|
||||||
|
switch_to_best_monitor();
|
||||||
|
});
|
||||||
|
|
||||||
|
hyprland.connect("monitor-removed", () => {
|
||||||
|
switch_to_best_monitor();
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Trying to find the best monitor");
|
||||||
|
|
||||||
app.start({
|
app.start({
|
||||||
css: style,
|
css: style,
|
||||||
iconTheme: "Papirus",
|
iconTheme: "Papirus",
|
||||||
main() {
|
main() {
|
||||||
register_windows(app.get_monitors()[0]);
|
switch_to_best_monitor();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import Apps from "gi://AstalApps";
|
import Apps from "gi://AstalApps";
|
||||||
|
import AstalHyprland from "gi://AstalHyprland";
|
||||||
|
|
||||||
const app_icons = new Apps.Apps().list.reduce(
|
const app_icons = new Apps.Apps().list.reduce(
|
||||||
(acc, app) => {
|
(acc, app) => {
|
||||||
|
|
@ -15,39 +16,57 @@ const app_icons = new Apps.Apps().list.reduce(
|
||||||
{ classOrNames: {} as Record<string, string>, executables: {} as Record<string, string> },
|
{ classOrNames: {} as Record<string, string>, executables: {} as Record<string, string> },
|
||||||
);
|
);
|
||||||
|
|
||||||
export function getIconName(app_id: string | null | undefined, title: string | null | undefined) {
|
export function getIconName(client: AstalHyprland.Client | null | undefined) {
|
||||||
if (!app_id && !title) return "";
|
if (!client) return "";
|
||||||
|
|
||||||
// try fields matching Niri outputs
|
// try a bunch of fields (snake_case and camelCase variants)
|
||||||
const possibleKeys = [
|
const possibleKeys = [
|
||||||
app_id,
|
// common client properties (snake_case)
|
||||||
title
|
(client as any).wm_class,
|
||||||
|
(client as any).initial_class,
|
||||||
|
(client as any).executable,
|
||||||
|
// camelCase variants (some bindings expose these)
|
||||||
|
(client as any).class,
|
||||||
|
(client as any).initialClass,
|
||||||
|
(client as any).initialTitle,
|
||||||
|
(client as any).title,
|
||||||
|
(client as any).name,
|
||||||
].filter(Boolean) as string[];
|
].filter(Boolean) as string[];
|
||||||
|
|
||||||
// 1) direct exact match
|
// 1) direct exact match
|
||||||
for (const k of possibleKeys) {
|
for (const k of possibleKeys) {
|
||||||
const icon = app_icons.classOrNames[k] ?? app_icons.executables[k];
|
const icon = app_icons.classOrNames[k] ?? app_icons.executables[k];
|
||||||
if (icon) {
|
if (icon) {
|
||||||
// cache the mapping
|
// cache the mapping for this client's canonical class (prefer wm_class or class)
|
||||||
const cacheKey = app_id ?? title ?? k;
|
const cacheKey = (client as any).wm_class ?? (client as any).class ?? (client as any).name ?? k;
|
||||||
app_icons.classOrNames[cacheKey] = icon;
|
app_icons.classOrNames[cacheKey] = icon;
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2) fuzzy match: see if any stored key includes any of the client strings (title, name, etc.)
|
// 2) fuzzy match: see if any stored key includes any of the client strings (title, name, etc.)
|
||||||
for (const s of possibleKeys) {
|
const searchStrings = [
|
||||||
|
(client as any).title,
|
||||||
|
(client as any).initialTitle,
|
||||||
|
(client as any).initial_class,
|
||||||
|
(client as any).initialClass,
|
||||||
|
(client as any).wm_class,
|
||||||
|
(client as any).class,
|
||||||
|
(client as any).name,
|
||||||
|
].filter(Boolean) as string[];
|
||||||
|
|
||||||
|
for (const s of searchStrings) {
|
||||||
const matchKey = Object.keys(app_icons.classOrNames).find((key) => key.includes(s));
|
const matchKey = Object.keys(app_icons.classOrNames).find((key) => key.includes(s));
|
||||||
if (matchKey) {
|
if (matchKey) {
|
||||||
const icon = app_icons.classOrNames[matchKey];
|
const icon = app_icons.classOrNames[matchKey];
|
||||||
const cacheKey = app_id ?? title ?? s;
|
const cacheKey = (client as any).wm_class ?? (client as any).class ?? (client as any).name ?? s;
|
||||||
app_icons.classOrNames[cacheKey] = icon;
|
app_icons.classOrNames[cacheKey] = icon;
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// nothing found — cache empty string so we don't repeat work
|
// nothing found — cache empty string so we don't repeat work
|
||||||
const cacheKey = app_id ?? title ?? "";
|
const cacheKey = (client as any).wm_class ?? (client as any).class ?? (client as any).name ?? "";
|
||||||
if (cacheKey) app_icons.classOrNames[cacheKey] = "";
|
if (cacheKey) app_icons.classOrNames[cacheKey] = "";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
pkgs.accountsservice
|
pkgs.accountsservice
|
||||||
|
|
||||||
battery
|
battery
|
||||||
# hyprland
|
hyprland
|
||||||
tray
|
tray
|
||||||
powerprofiles
|
powerprofiles
|
||||||
wireplumber
|
wireplumber
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
{
|
{pkgs, ...}: let
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
lock-false = {
|
lock-false = {
|
||||||
Value = false;
|
Value = false;
|
||||||
Status = "locked";
|
Status = "locked";
|
||||||
|
|
@ -10,7 +6,6 @@
|
||||||
in {
|
in {
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configPath = "${config.xdg.configHome}/mozilla/firefox";
|
|
||||||
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
|
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
|
||||||
pkcs11Modules = [
|
pkcs11Modules = [
|
||||||
pkgs.eid-mw
|
pkgs.eid-mw
|
||||||
|
|
@ -66,18 +61,22 @@ in {
|
||||||
default = "ddg";
|
default = "ddg";
|
||||||
order = ["ddg" "google"];
|
order = ["ddg" "google"];
|
||||||
};
|
};
|
||||||
# extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||||
# ublock-origin
|
ublock-origin
|
||||||
# bitwarden
|
bitwarden
|
||||||
# display-_anchors
|
privacy-badger
|
||||||
# facebook-container
|
beyond-20
|
||||||
# multi-account-containers
|
display-_anchors
|
||||||
# istilldontcareaboutcookies
|
facebook-container
|
||||||
# return-youtube-dislikes
|
multi-account-containers
|
||||||
# sponsorblock
|
istilldontcareaboutcookies
|
||||||
# unpaywall
|
return-youtube-dislikes
|
||||||
# duckduckgo-privacy-essentials
|
sponsorblock
|
||||||
# ];
|
unpaywall
|
||||||
|
vimium
|
||||||
|
google-container
|
||||||
|
duckduckgo-privacy-essentials
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -2,14 +2,6 @@
|
||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
lfs.enable = true;
|
lfs.enable = true;
|
||||||
|
|
||||||
# 1. Update the signing configuration
|
|
||||||
signing = {
|
|
||||||
format = "ssh";
|
|
||||||
key = "/home/user/.secrets/SSH/Aloria/id_ed25519";
|
|
||||||
signByDefault = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
alias = {
|
alias = {
|
||||||
s = "status";
|
s = "status";
|
||||||
|
|
@ -19,14 +11,10 @@
|
||||||
name = "Thomas Avé";
|
name = "Thomas Avé";
|
||||||
email = "email@thomasave.be";
|
email = "email@thomasave.be";
|
||||||
};
|
};
|
||||||
|
|
||||||
# 2. Tell Git where your allowed_signers file is located
|
|
||||||
gpg.ssh.allowedSignersFile = "~/.ssh/allowed_signers";
|
|
||||||
|
|
||||||
credentials.helper = "store";
|
credentials.helper = "store";
|
||||||
pull.rebase = false;
|
pull.rebase = false;
|
||||||
push.autoSetupRemote = true;
|
push.autoSetupRemove = true;
|
||||||
branch.autoSetupMerge = "always";
|
branch.autoSetupMerge = true;
|
||||||
init.defaultBranch = "master";
|
init.defaultBranch = "master";
|
||||||
diff.noprefix = true;
|
diff.noprefix = true;
|
||||||
color.ui = "auto";
|
color.ui = "auto";
|
||||||
|
|
@ -36,24 +24,11 @@
|
||||||
};
|
};
|
||||||
rerere.enabled = true;
|
rerere.enabled = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
ignores = [
|
ignores = [
|
||||||
"*.direnv/"
|
"*.direnv/"
|
||||||
"*.nix/"
|
|
||||||
"uv.lock"
|
|
||||||
".dmypy.json"
|
".dmypy.json"
|
||||||
".envrc"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
programs.delta = {
|
|
||||||
enable = true;
|
|
||||||
options = {
|
|
||||||
diff-so-fancy = true;
|
|
||||||
file-style = "omit";
|
|
||||||
# hunk-header-style = "omit";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.lazygit = {
|
programs.lazygit = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
|
@ -61,18 +36,6 @@
|
||||||
editPreset = "nvim";
|
editPreset = "nvim";
|
||||||
autoStageResolvedConflicts = false;
|
autoStageResolvedConflicts = false;
|
||||||
};
|
};
|
||||||
git.overrideGpg = true;
|
|
||||||
git.pagers = [
|
|
||||||
{
|
|
||||||
colorArg = "always";
|
|
||||||
pager = "delta --dark --color-only --paging=never";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# 3. Declaratively create the allowed_signers file (Assuming Home Manager)
|
|
||||||
home.file.".ssh/allowed_signers".text = ''
|
|
||||||
email@thomasave.be namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBxMq4kubz4wWr4S8xU3GRkPcn6XRS3y7IP+qylN5QAp user@Aloria
|
|
||||||
'';
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
pname = "Helium";
|
pname = "Helium";
|
||||||
version = "0.4.7.1";
|
version = "0.4.7.1";
|
||||||
src = pkgs.fetchurl {
|
src = pkgs.fetchurl {
|
||||||
url = "https://github.com/imputnet/helium-linux/releases/download/0.11.7.1/helium-0.11.7.1-x86_64.AppImage";
|
url = "https://github.com/imputnet/helium-linux/releases/download/0.9.4.1/helium-0.9.4.1-x86_64.AppImage";
|
||||||
sha256 = "sha256-qzc135IP5F2btxtOMUGMz+0azJhYL9KI0lcPG2KjcxU=";
|
sha256 = "sha256-N5gdWuxOrIudJx/4nYo4/SKSxakpTFvL4zzByv6Cnug=";
|
||||||
};
|
};
|
||||||
extraPkgs = pkgs: [pkgs.tzdata];
|
|
||||||
profile = "export TZ=Europe/Brussels";
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
xdg.desktopEntries = {
|
xdg.desktopEntries = {
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,7 @@ in {
|
||||||
"rounding 0, match:float 0, match:workspace f[1]"
|
"rounding 0, match:float 0, match:workspace f[1]"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# UPDATED: New Layer Rule Syntax (0.53.0)
|
||||||
# Syntax: effect value, match:namespace regex
|
# Syntax: effect value, match:namespace regex
|
||||||
layerrule = [
|
layerrule = [
|
||||||
"no_anim on, match:namespace ags_bar_0"
|
"no_anim on, match:namespace ags_bar_0"
|
||||||
|
|
|
||||||
|
|
@ -3,40 +3,9 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.file."${config.xdg.configHome}/mpv/scripts".source = ./files/scripts;
|
home.file."${config.xdg.configHome}/mpv" = {
|
||||||
home.file."${config.xdg.configHome}/mpv/fonts".source = ./files/fonts;
|
source = ./files;
|
||||||
|
recursive = true;
|
||||||
programs.mpv = {
|
|
||||||
enable = true;
|
|
||||||
config = {
|
|
||||||
osc = false;
|
|
||||||
save-position-on-quit = true;
|
|
||||||
sub-auto = "fuzzy";
|
|
||||||
sub-font-size = 30;
|
|
||||||
profile = "gpu-hq";
|
|
||||||
scale = "ewa_lanczossharp";
|
|
||||||
cscale = "ewa_lanczossharp";
|
|
||||||
video-sync = "display-resample";
|
|
||||||
interpolation = true;
|
|
||||||
tscale = "oversample";
|
|
||||||
vo = "gpu";
|
|
||||||
hwdec = "auto";
|
|
||||||
force-window = true;
|
|
||||||
keep-open = true;
|
|
||||||
};
|
|
||||||
bindings = {
|
|
||||||
"UP" = "add volume +5";
|
|
||||||
"DOWN" = "add volume -5";
|
|
||||||
"Ctrl+Shift+r" = "add sub-scale +0.05";
|
|
||||||
"Ctrl+r" = "add sub-scale -0.05";
|
|
||||||
"Ctrl+Alt+r" = "set sub-scale 1";
|
|
||||||
};
|
|
||||||
profiles.Idle = {
|
|
||||||
profile-cond = ''p["idle-active"]'';
|
|
||||||
profile-restore = "copy-equal";
|
|
||||||
title = "' '";
|
|
||||||
keepaspect = false;
|
|
||||||
background = "none";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
programs.mpv = {enable = true;};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
osc=no
|
||||||
|
save-position-on-quit=yes
|
||||||
|
sub-auto=fuzzy
|
||||||
|
profile=gpu-hq
|
||||||
|
scale=ewa_lanczossharp
|
||||||
|
cscale=ewa_lanczossharp
|
||||||
|
video-sync=display-resample
|
||||||
|
interpolation
|
||||||
|
tscale=oversample
|
||||||
|
vo=gpu
|
||||||
|
hwdec=auto
|
||||||
|
force-window=yes
|
||||||
|
keep-open=yes
|
||||||
|
|
||||||
|
[Idle]
|
||||||
|
profile-cond=p["idle-active"]
|
||||||
|
profile-restore=copy-equal
|
||||||
|
title=' '
|
||||||
|
keepaspect=no
|
||||||
|
background=none
|
||||||
|
|
@ -1,244 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
scale ? null,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
terminal = "${pkgs.foot}/bin/footclient";
|
|
||||||
nautilus = "${pkgs.nautilus}/bin/nautilus";
|
|
||||||
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
|
||||||
wpctl = "${pkgs.wireplumber}/bin/wpctl";
|
|
||||||
brightnessctl = "${pkgs.brightnessctl}/bin/brightnessctl";
|
|
||||||
terminal-name = "foot";
|
|
||||||
launch_terminal = pkgs.writeShellScriptBin "launch_terminal" ''
|
|
||||||
function find_leaf_pid(){
|
|
||||||
local PID
|
|
||||||
local RET
|
|
||||||
local NAME
|
|
||||||
PID=$1
|
|
||||||
for CHILD_PID in $(pgrep -P "$PID"); do
|
|
||||||
RET=$(find_leaf_pid "$CHILD_PID")
|
|
||||||
if [ "$RET" != "" ]; then
|
|
||||||
PID="$RET"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
NAME=$(ps -p "$PID" -o comm=)
|
|
||||||
if [ "$NAME" == "zsh" ]; then
|
|
||||||
echo "$PID"
|
|
||||||
elif [ "$NAME" == "ssh" ]; then
|
|
||||||
echo "$PID"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
LEAF_PID=$(find_leaf_pid "$1")
|
|
||||||
if [ "$(ps -p "$LEAF_PID" -o comm=)" == "ssh" ]; then
|
|
||||||
SSH_COMMAND=$(ps -p "$LEAF_PID" -o args --no-headers)
|
|
||||||
if [[ "$SSH_COMMAND" == *"waypipe"* ]]; then
|
|
||||||
CLIENT=$(echo "$SSH_COMMAND" | awk '{ print $5 }')
|
|
||||||
PREVIOUS_SESSION_ID=$(grep -z "SSH_SESSION_ID" "/proc/$LEAF_PID/environ" | xargs -0 -n 1 | grep -oP "[0-9]*")
|
|
||||||
SSH_SESSION_ID=$RANDOM
|
|
||||||
${terminal} -e zsh -c "SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t \"$CLIENT\" env SSH_SESSION_ID=\"$SSH_SESSION_ID\" PREVIOUS_SESSION_ID=\"$PREVIOUS_SESSION_ID\" \"zsh --login\""
|
|
||||||
else
|
|
||||||
${terminal} -e zsh -c "ssh -t \"$(echo "$SSH_COMMAND" | awk '{ print $2 }')\""
|
|
||||||
fi
|
|
||||||
|
|
||||||
else # Not an ssh session
|
|
||||||
if [ "$(ps -p "$1" -o comm=)" == "${terminal-name}" ]; then
|
|
||||||
CWD=$(readlink -e /proc/"$LEAF_PID"/cwd)
|
|
||||||
if [ "$CWD" != "" ]; then
|
|
||||||
${terminal} --working-directory "$CWD"
|
|
||||||
else
|
|
||||||
${terminal}
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
${terminal}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
# Since native Home Manager doesn't have a programs.niri module yet,
|
|
||||||
# we generate the KDL configuration file directly.
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
wl-clipboard
|
|
||||||
];
|
|
||||||
programs.hyprlock = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
input-field = [
|
|
||||||
{
|
|
||||||
size = "200, 50";
|
|
||||||
position = "0, -80";
|
|
||||||
monitor = "";
|
|
||||||
dots_center = true;
|
|
||||||
fade_on_empty = true;
|
|
||||||
font_color = "rgb(202, 211, 245)";
|
|
||||||
inner_color = "rgb(91, 96, 120)";
|
|
||||||
outer_color = "rgb(24, 25, 38)";
|
|
||||||
outline_thickness = 3;
|
|
||||||
placeholder_text = "<span foreground=\"##cad3f5\">Password...</span>";
|
|
||||||
shadow_passes = 2;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
general = {
|
|
||||||
no_fade_in = false;
|
|
||||||
};
|
|
||||||
background = [
|
|
||||||
{
|
|
||||||
path = "screenshot";
|
|
||||||
blur_passes = 3;
|
|
||||||
blur_size = 8;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.configFile."niri/config.kdl".text = ''
|
|
||||||
spawn-at-startup "${pkgs.swaybg}/bin/swaybg" "-i" "${../hyprland/files/wallpaper.png}" "-m" "fill"
|
|
||||||
spawn-at-startup "foot" "--server"
|
|
||||||
spawn-at-startup "ags" "run"
|
|
||||||
spawn-at-startup "${pkgs.mate-polkit}/bin/polkit-mate"
|
|
||||||
prefer-no-csd
|
|
||||||
|
|
||||||
hotkey-overlay {
|
|
||||||
skip-at-startup
|
|
||||||
}
|
|
||||||
|
|
||||||
gestures {
|
|
||||||
hot-corners {
|
|
||||||
off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
layout {
|
|
||||||
gaps 5
|
|
||||||
border {
|
|
||||||
off
|
|
||||||
}
|
|
||||||
focus-ring {
|
|
||||||
width 4
|
|
||||||
active-color "rgba(0, 47, 95, 238)"
|
|
||||||
inactive-color "rgba(255, 255, 255, 0)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
mouse {
|
|
||||||
accel-speed 0.5
|
|
||||||
}
|
|
||||||
touchpad {
|
|
||||||
tap
|
|
||||||
}
|
|
||||||
keyboard {
|
|
||||||
xkb {
|
|
||||||
options "compose:rctrl"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
focus-follows-mouse max-scroll-amount="10%"
|
|
||||||
warp-mouse-to-focus
|
|
||||||
}
|
|
||||||
output "HDMI-A-1" {
|
|
||||||
scale 1.0
|
|
||||||
position x=0 y=-2160
|
|
||||||
}
|
|
||||||
${
|
|
||||||
if scale != null
|
|
||||||
then ''
|
|
||||||
output "eDP-1" {
|
|
||||||
scale ${toString scale}
|
|
||||||
position x=0 y=0
|
|
||||||
}
|
|
||||||
''
|
|
||||||
else ""
|
|
||||||
} window-rule {
|
|
||||||
match app-id="vicinae"
|
|
||||||
open-floating true
|
|
||||||
}
|
|
||||||
|
|
||||||
binds {
|
|
||||||
// General Binds
|
|
||||||
Mod+Return { spawn "sh" "-c" "${launch_terminal}/bin/launch_terminal $(niri msg --json focused-window | ${pkgs.jq}/bin/jq .pid)"; }
|
|
||||||
Mod+Shift+Return { spawn "${terminal}"; }
|
|
||||||
Mod+Q { close-window; }
|
|
||||||
Mod+A { spawn "${nautilus}"; }
|
|
||||||
Mod+B { spawn "Helium"; }
|
|
||||||
Mod+M { maximize-column; }
|
|
||||||
Mod+F {maximize-window-to-edges;}
|
|
||||||
Mod+Tab { toggle-overview; }
|
|
||||||
|
|
||||||
// Vicinae Binds
|
|
||||||
Mod+C { spawn "vicinae" "vicinae://launch/clipboard/history"; }
|
|
||||||
Mod+N { spawn "vicinae" "vicinae://launch/wm/switch-windows"; }
|
|
||||||
Mod+Escape { spawn "vicinae" "open" "-q" "Power Management "; }
|
|
||||||
Mod+Space { spawn "vicinae" "toggle"; }
|
|
||||||
|
|
||||||
Mod+Comma { consume-or-expel-window-left; }
|
|
||||||
Mod+Period { consume-or-expel-window-right; }
|
|
||||||
|
|
||||||
Mod+Alt+H { set-column-width "-5%"; }
|
|
||||||
Mod+Alt+L { set-column-width "+5%"; }
|
|
||||||
Mod+Alt+K { set-window-height "-5%"; }
|
|
||||||
Mod+Alt+J { set-window-height "+5%"; }
|
|
||||||
|
|
||||||
// Movement
|
|
||||||
Mod+H { focus-column-or-monitor-left; }
|
|
||||||
Mod+J { focus-window-or-monitor-down; }
|
|
||||||
Mod+K { focus-window-or-monitor-up; }
|
|
||||||
Mod+L { focus-column-or-monitor-right; }
|
|
||||||
|
|
||||||
Mod+Shift+H { move-column-left-or-to-monitor-left; }
|
|
||||||
Mod+Shift+L { move-column-right-or-to-monitor-right; }
|
|
||||||
Mod+Shift+J { move-window-down-or-to-workspace-down; }
|
|
||||||
Mod+Shift+K { move-window-up-or-to-workspace-up; }
|
|
||||||
|
|
||||||
// Move window to the other monitor
|
|
||||||
Mod+Ctrl+K { move-window-to-monitor-up; }
|
|
||||||
Mod+Ctrl+J { move-window-to-monitor-down; }
|
|
||||||
|
|
||||||
// Workspaces
|
|
||||||
Mod+Shift+U { move-column-to-workspace-down; }
|
|
||||||
Mod+Shift+I { move-column-to-workspace-up; }
|
|
||||||
|
|
||||||
Mod+I { focus-workspace-up; }
|
|
||||||
Mod+U { focus-workspace-down; }
|
|
||||||
Mod+1 { focus-workspace 1; }
|
|
||||||
Mod+2 { focus-workspace 2; }
|
|
||||||
Mod+3 { focus-workspace 3; }
|
|
||||||
Mod+4 { focus-workspace 4; }
|
|
||||||
Mod+5 { focus-workspace 5; }
|
|
||||||
Mod+6 { focus-workspace 6; }
|
|
||||||
Mod+7 { focus-workspace 7; }
|
|
||||||
Mod+8 { focus-workspace 8; }
|
|
||||||
Mod+9 { focus-workspace 9; }
|
|
||||||
|
|
||||||
// Move to workspace
|
|
||||||
Mod+Shift+1 { move-column-to-workspace 1; }
|
|
||||||
Mod+Shift+2 { move-column-to-workspace 2; }
|
|
||||||
Mod+Shift+3 { move-column-to-workspace 3; }
|
|
||||||
Mod+Shift+4 { move-column-to-workspace 4; }
|
|
||||||
Mod+Shift+5 { move-column-to-workspace 5; }
|
|
||||||
Mod+Shift+6 { move-column-to-workspace 6; }
|
|
||||||
Mod+Shift+7 { move-column-to-workspace 7; }
|
|
||||||
Mod+Shift+8 { move-column-to-workspace 8; }
|
|
||||||
Mod+Shift+9 { move-column-to-workspace 9; }
|
|
||||||
|
|
||||||
Print { screenshot; }
|
|
||||||
Ctrl+Alt+L {spawn "${pkgs.hyprlock}/bin/hyprlock"; }
|
|
||||||
|
|
||||||
XF86MonBrightnessUp { spawn "${brightnessctl}" "set" "+10%"; }
|
|
||||||
XF86MonBrightnessDown { spawn "${brightnessctl}" "set" "10%-"; }
|
|
||||||
|
|
||||||
// Volume
|
|
||||||
XF86AudioRaiseVolume { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "10%+" "--limit" "1.0"; }
|
|
||||||
XF86AudioLowerVolume { spawn "${wpctl}" "set-volume" "@DEFAULT_AUDIO_SINK@" "10%-"; }
|
|
||||||
XF86AudioMute { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
|
||||||
XF86AudioMicMute { spawn "${wpctl}" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
|
||||||
|
|
||||||
// Media
|
|
||||||
XF86AudioNext { spawn "${playerctl}" "next"; }
|
|
||||||
XF86AudioPrev { spawn "${playerctl}" "previous"; }
|
|
||||||
Mod+XF86AudioMute { spawn "${playerctl}" "play-pause"; }
|
|
||||||
Mod+XF86AudioRaiseVolume { spawn "${playerctl}" "next"; }
|
|
||||||
Mod+XF86AudioLowerVolume { spawn "${playerctl}" "previous"; }
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
|
|
@ -2,19 +2,9 @@
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
basedpyrightShim = pkgs.symlinkJoin {
|
|
||||||
name = "basedpyright-with-pyright-shim";
|
|
||||||
paths = [pkgs.basedpyright];
|
|
||||||
postBuild = ''
|
|
||||||
ln -s $out/bin/basedpyright-langserver $out/bin/pyright-langserver
|
|
||||||
ln -s $out/bin/basedpyright $out/bin/pyright
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# codeium
|
# codeium
|
||||||
basedpyrightShim
|
|
||||||
nixd
|
nixd
|
||||||
alejandra
|
alejandra
|
||||||
clang-tools
|
clang-tools
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,12 @@ end
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
'saghen/blink.compat',
|
'saghen/blink.compat',
|
||||||
|
version = '*',
|
||||||
lazy = true,
|
lazy = true,
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'saghen/blink.cmp',
|
'saghen/blink.cmp',
|
||||||
branch = 'v1',
|
|
||||||
version = "1.*",
|
|
||||||
dependencies = {
|
dependencies = {
|
||||||
'rafamadriz/friendly-snippets',
|
'rafamadriz/friendly-snippets',
|
||||||
'honza/vim-snippets',
|
'honza/vim-snippets',
|
||||||
|
|
@ -23,8 +22,8 @@ return {
|
||||||
},
|
},
|
||||||
build = 'nix run --extra-experimental-features flakes --extra-experimental-features nix-command .#build-plugin',
|
build = 'nix run --extra-experimental-features flakes --extra-experimental-features nix-command .#build-plugin',
|
||||||
keys = {
|
keys = {
|
||||||
{ "<leader>n", function() vim.diagnostic.jump({ count = 1 }) end },
|
{ "<leader>n", vim.diagnostic.goto_next },
|
||||||
{ "<leader>p", function() vim.diagnostic.jump({ count = -1 }) end },
|
{ "<leader>p", vim.diagnostic.goto_prev },
|
||||||
{ "<leader>f", vim.lsp.buf.code_action },
|
{ "<leader>f", vim.lsp.buf.code_action },
|
||||||
{ "gd", vim.lsp.buf.definition },
|
{ "gd", vim.lsp.buf.definition },
|
||||||
{ "gi", vim.lsp.buf.implementation },
|
{ "gi", vim.lsp.buf.implementation },
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ borg create -s --progress \
|
||||||
|
|
||||||
borg prune -d 365 --save-space 10.4.0.1:Storage/Thomas/Borg/Cloud
|
borg prune -d 365 --save-space 10.4.0.1:Storage/Thomas/Borg/Cloud
|
||||||
borg compact 10.4.0.1:Storage/Thomas/Borg/Cloud
|
borg compact 10.4.0.1:Storage/Thomas/Borg/Cloud
|
||||||
# ssh vault /home/server/Storage/Thomas/Borg/Sync.sh
|
ssh vault /home/server/Storage/Thomas/Borg/Sync.sh
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# Lock the Vault #
|
# Lock the Vault #
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,48 @@
|
||||||
user = "server";
|
user = "server";
|
||||||
forwardAgent = true;
|
forwardAgent = true;
|
||||||
};
|
};
|
||||||
|
Kell = {
|
||||||
|
host = "Kell";
|
||||||
|
hostname = "kell.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
|
kell = {
|
||||||
|
host = "kell";
|
||||||
|
hostname = "kell.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
|
Riva = {
|
||||||
|
host = "Riva";
|
||||||
|
hostname = "riva.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
|
riva = {
|
||||||
|
host = "riva";
|
||||||
|
hostname = "riva.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
|
Arch = {
|
||||||
|
host = "Arch";
|
||||||
|
hostname = "arch.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
|
arch = {
|
||||||
|
host = "arch";
|
||||||
|
hostname = "arch.thomasave.be";
|
||||||
|
port = 22;
|
||||||
|
user = "user";
|
||||||
|
forwardAgent = true;
|
||||||
|
};
|
||||||
Vault = {
|
Vault = {
|
||||||
host = "Vault";
|
host = "Vault";
|
||||||
hostname = "etienne.thomasave.be";
|
hostname = "etienne.thomasave.be";
|
||||||
|
|
|
||||||
|
|
@ -20,18 +20,14 @@
|
||||||
targets.genericLinux.enable = true;
|
targets.genericLinux.enable = true;
|
||||||
programs.home-manager.enable = true;
|
programs.home-manager.enable = true;
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
inputs.worktimer.packages.${pkgs.stdenv.hostPlatform.system}.default
|
|
||||||
htop
|
htop
|
||||||
ghostscript
|
ghostscript
|
||||||
waypipe
|
waypipe
|
||||||
traceroute
|
inputs.worktimer.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||||
tree
|
|
||||||
usbutils
|
usbutils
|
||||||
gocryptfs
|
gocryptfs
|
||||||
sshfs
|
sshfs
|
||||||
ncdu
|
ncdu
|
||||||
jq
|
|
||||||
rclone
|
|
||||||
];
|
];
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
XDG_CONFIG_HOME = "${config.xdg.configHome}";
|
XDG_CONFIG_HOME = "${config.xdg.configHome}";
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,12 @@
|
||||||
inputs,
|
inputs,
|
||||||
config,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
scale ? null,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
(import ./common.nix {inherit inputs config pkgs;})
|
(import ./common.nix {inherit inputs config pkgs;})
|
||||||
(import ./python.nix {inherit inputs config pkgs;})
|
(import ./python.nix {inherit inputs config pkgs;})
|
||||||
# (import ../hyprland {inherit inputs pkgs;})
|
(import ../hyprland {inherit inputs pkgs;})
|
||||||
(import ../niri {inherit inputs config pkgs scale;})
|
|
||||||
(import ../ags {inherit inputs pkgs;})
|
(import ../ags {inherit inputs pkgs;})
|
||||||
../rofi
|
../rofi
|
||||||
../vicinae
|
../vicinae
|
||||||
|
|
@ -120,5 +118,4 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
gtk.gtk4.theme = config.gtk.theme; # Silence warning
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,16 @@
|
||||||
{...}: {
|
{inputs, ...}:
|
||||||
programs.vicinae = {
|
# Add inputs here
|
||||||
|
{
|
||||||
|
# Import the module definition here
|
||||||
|
imports = [inputs.vicinae.homeManagerModules.default];
|
||||||
|
|
||||||
|
services.vicinae = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemd = {
|
systemd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
};
|
environment = {
|
||||||
settings = {
|
QT_SCALE_FACTOR = "1.5";
|
||||||
font = {
|
|
||||||
normal = {
|
|
||||||
family = "Ubuntu Nerd Font";
|
|
||||||
size = 8;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
theme = {
|
|
||||||
dark = {
|
|
||||||
name = "ayu-dark";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
launcher_window = {
|
|
||||||
opacity = 0.95;
|
|
||||||
client_side_decorations = {
|
|
||||||
enabled = true;
|
|
||||||
border_width = 0;
|
|
||||||
rounding = 10;
|
|
||||||
shadow_size = 0;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -46,12 +46,12 @@
|
||||||
"hyprland/window" = {max-length = 50;};
|
"hyprland/window" = {max-length = 50;};
|
||||||
tray = {spacing = 10;};
|
tray = {spacing = 10;};
|
||||||
"clock#clock2" = {
|
"clock#clock2" = {
|
||||||
timezone = "Europe/Brussels";
|
timezone = "Asia/Bangkok";
|
||||||
format = "{:%H:%M:%S}";
|
format = "{:%H:%M:%S}";
|
||||||
interval = 1;
|
interval = 1;
|
||||||
};
|
};
|
||||||
clock = {
|
clock = {
|
||||||
timezone = "Europe/Brussels";
|
timezone = "Asia/Bangkok";
|
||||||
format = "{:%Y-%m-%d}";
|
format = "{:%Y-%m-%d}";
|
||||||
interval = 3600;
|
interval = 3600;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
pkgs.moreutils
|
pkgs.moreutils
|
||||||
inputs.fzgo.packages.${pkgs.stdenv.hostPlatform.system}.default
|
inputs.fzgo.packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||||
];
|
];
|
||||||
programs.zsh.dotDir = "${config.xdg.configHome}/zsh";
|
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
BROWSER = "Helium";
|
BROWSER = "Helium";
|
||||||
PDF_VIEWER = "evince";
|
PDF_VIEWER = "evince";
|
||||||
|
|
@ -78,10 +77,6 @@
|
||||||
source ${./files/keys.zsh}
|
source ${./files/keys.zsh}
|
||||||
eval "$(direnv hook zsh)"
|
eval "$(direnv hook zsh)"
|
||||||
export LD_LIBRARY_PATH=${pkgs.sqlite.out}/lib:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=${pkgs.sqlite.out}/lib:$LD_LIBRARY_PATH
|
||||||
# Fix zsh-vi-mode bracketed paste: the trailing ~ of \e[201~ leaks
|
|
||||||
# into vicmd and toggles case of the last pasted character.
|
|
||||||
bindkey -M viins '^[[200~' .bracketed-paste
|
|
||||||
bindkey -M vicmd '^[[200~' .bracketed-paste
|
|
||||||
}
|
}
|
||||||
function o() {
|
function o() {
|
||||||
${pkgs.handlr-regex}/bin/handlr open $@ < /dev/null &> /dev/null & disown
|
${pkgs.handlr-regex}/bin/handlr open $@ < /dev/null &> /dev/null & disown
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,8 @@
|
||||||
# xplr # xplr shell (https://github.com/sayanarijit/xplr)
|
# xplr # xplr shell (https://github.com/sayanarijit/xplr)
|
||||||
# vim_shell # vim shell indicator (:sh)
|
# vim_shell # vim shell indicator (:sh)
|
||||||
# midnight_commander # midnight commander shell (https://midnight-commander.org/)
|
# midnight_commander # midnight commander shell (https://midnight-commander.org/)
|
||||||
# nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
|
nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
|
||||||
# vi_mode # vi mode (you don't need this if you've enabled prompt_char)
|
vi_mode # vi mode (you don't need this if you've enabled prompt_char)
|
||||||
# vpn_ip # virtual private network indicator
|
# vpn_ip # virtual private network indicator
|
||||||
# load # CPU load
|
# load # CPU load
|
||||||
# disk_usage # disk usage
|
# disk_usage # disk usage
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,20 @@
|
||||||
if [ "$PREVIOUS_SESSION_ID" != "" ]; then
|
if [ "$SSH_SESSION_ID" != "" ]; then
|
||||||
# Spawned as a new window/terminal for an existing remote session (by the
|
mkdir -p /tmp/ssh_sessions
|
||||||
# niri/hyprland keybind). Inherit that session's working directory: find a
|
echo $$ > /tmp/ssh_sessions/"$SSH_SESSION_ID"
|
||||||
# live shell whose SSH_SESSION_ID (carried in its environment) matches and
|
fi
|
||||||
# cd to its cwd. Then drop the hint so child shells don't keep jumping back.
|
|
||||||
_best_pid=0
|
if [ "$REMOTE_PATH" != "" ]; then
|
||||||
_prev_cwd=""
|
if [ -d "$REMOTE_PATH" ]; then
|
||||||
for _environ in /proc/[0-9]*/environ; do
|
cd "$REMOTE_PATH"
|
||||||
_pid=${_environ%/environ}
|
fi
|
||||||
_pid=${_pid#/proc/}
|
elif [ "$PREVIOUS_SESSION_ID" != "" ]; then
|
||||||
# cat (not a < redirect) so unreadable/ptrace-protected environ files
|
cd "$(readlink -e /proc/$(cat /tmp/ssh_sessions/$PREVIOUS_SESSION_ID)/cwd)"
|
||||||
# fail quietly into the pipe instead of raising a shell error.
|
|
||||||
if cat "$_environ" 2>/dev/null | tr '\0' '\n' | grep -Fxq "SSH_SESSION_ID=$PREVIOUS_SESSION_ID"; then
|
|
||||||
[ "$(cat /proc/$_pid/comm 2>/dev/null)" = zsh ] || continue
|
|
||||||
_c=$(readlink -e /proc/$_pid/cwd 2>/dev/null) || continue
|
|
||||||
if [ -n "$_c" ] && [ "$_pid" -gt "$_best_pid" ]; then
|
|
||||||
_best_pid=$_pid
|
|
||||||
_prev_cwd=$_c
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
[ -n "$_prev_cwd" ] && cd "$_prev_cwd"
|
|
||||||
unset _best_pid _prev_cwd _environ _pid _c PREVIOUS_SESSION_ID
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function run_waypipe() {
|
function run_waypipe() {
|
||||||
if [ -z "$1" ]; then
|
SSH_SESSION_ID=$RANDOM
|
||||||
echo "usage: run_waypipe <host>" >&2
|
REMOTE_PATH=$(echo $(pwd) | sed "s|/home/[a-z]*|\$HOME|g")
|
||||||
return 1
|
SSH_SESSION_ID=$SSH_SESSION_ID waypipe -n ssh -t $1 env REMOTE_PATH=\"$REMOTE_PATH\" SSH_SESSION_ID=$SSH_SESSION_ID "zsh --login"
|
||||||
fi
|
|
||||||
local SSH_SESSION_ID=$RANDOM REMOTE_PATH
|
|
||||||
# Map the current path relative to $HOME so it resolves to the remote user's
|
|
||||||
# home even when the username differs (the remote shell expands $HOME).
|
|
||||||
if [[ "$PWD" == "$HOME" || "$PWD" == "$HOME"/* ]]; then
|
|
||||||
REMOTE_PATH="\$HOME${PWD#$HOME}"
|
|
||||||
else
|
|
||||||
REMOTE_PATH="$PWD"
|
|
||||||
fi
|
|
||||||
# cd into the mirrored path before the interactive shell starts, so the cwd
|
|
||||||
# is never carried in an inherited env var (which would leak to every child
|
|
||||||
# shell and override the cwd of new zellij panes). SSH_SESSION_ID stays in
|
|
||||||
# the environment on purpose: it is the token the WM keybind above uses to
|
|
||||||
# locate this session's shells later.
|
|
||||||
waypipe -n ssh -t "$1" "cd \"$REMOTE_PATH\" 2>/dev/null; exec env SSH_SESSION_ID=$SSH_SESSION_ID zsh --login"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
alias s='run_waypipe'
|
alias s='run_waypipe'
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
# serverIP = "10.0.0.1";
|
serverIP = "10.0.0.1";
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
(import ../Common/default.nix {inherit inputs pkgs config;})
|
(import ../Common/default.nix {inherit inputs pkgs config;})
|
||||||
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
||||||
# (import ../Common/nfs.nix {inherit pkgs serverIP;})
|
(import ../Common/nfs.nix {inherit pkgs serverIP;})
|
||||||
(import ../Common/zfs.nix {inherit inputs pkgs config;})
|
(import ../Common/zfs.nix {inherit inputs pkgs config;})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -128,7 +128,7 @@ in {
|
||||||
peers = [
|
peers = [
|
||||||
{
|
{
|
||||||
publicKey = "/9ppjm3yeD0duDvxrqgcHscHmftXko+0s2RbivNEy2c=";
|
publicKey = "/9ppjm3yeD0duDvxrqgcHscHmftXko+0s2RbivNEy2c=";
|
||||||
allowedIPs = ["0.0.0.0/0"];
|
allowedIPs = ["0.0.0.0/0" "::/0"];
|
||||||
endpoint = "external.thomasave.be:13231";
|
endpoint = "external.thomasave.be:13231";
|
||||||
persistentKeepalive = 25;
|
persistentKeepalive = 25;
|
||||||
}
|
}
|
||||||
|
|
@ -138,7 +138,7 @@ in {
|
||||||
address = ["10.0.0.5/24"];
|
address = ["10.0.0.5/24"];
|
||||||
privateKeyFile = "/home/user/.secrets/Wireguard/Aloria.key";
|
privateKeyFile = "/home/user/.secrets/Wireguard/Aloria.key";
|
||||||
listenPort = 51820;
|
listenPort = 51820;
|
||||||
autostart = false;
|
autostart = true;
|
||||||
postUp = "resolvectl dns OPNsense 10.0.0.1; resolvectl domain OPNsense ~thomasave.be;";
|
postUp = "resolvectl dns OPNsense 10.0.0.1; resolvectl domain OPNsense ~thomasave.be;";
|
||||||
dns = ["10.0.0.1"];
|
dns = ["10.0.0.1"];
|
||||||
peers = [
|
peers = [
|
||||||
|
|
@ -150,6 +150,21 @@ in {
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
GCP = {
|
||||||
|
address = ["10.5.0.5/24"];
|
||||||
|
privateKeyFile = "/home/user/.secrets/Wireguard/GCP.key";
|
||||||
|
listenPort = 51820;
|
||||||
|
autostart = false;
|
||||||
|
postUp = "resolvectl dns GCP 1.1.1.1;resolvectl dns wlan0 1.1.1.1;";
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "NEBNE4Czf2MkZF2X5aVhmofENH1uXjDpvXjIMJvfMFA=";
|
||||||
|
allowedIPs = ["0.0.0.0/0"];
|
||||||
|
endpoint = "35.201.231.151:443";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
systemd.services."wg-quick-OPNsense" = {
|
systemd.services."wg-quick-OPNsense" = {
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
|
@ -158,14 +173,6 @@ in {
|
||||||
};
|
};
|
||||||
unitConfig.StartLimitIntervalSec = 0;
|
unitConfig.StartLimitIntervalSec = 0;
|
||||||
};
|
};
|
||||||
services.tailscale = {
|
|
||||||
enable = true;
|
|
||||||
extraUpFlags = [
|
|
||||||
"--login-server=https://headscale.thomasave.be"
|
|
||||||
"--accept-routes"
|
|
||||||
];
|
|
||||||
authKeyFile = "/home/user/.secrets/Tailscale/Aloria/authkey";
|
|
||||||
};
|
|
||||||
services.usbmuxd.enable = true;
|
services.usbmuxd.enable = true;
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
libcamera
|
libcamera
|
||||||
|
|
@ -178,22 +185,5 @@ in {
|
||||||
"net.ipv6.conf.all.disable_ipv6" = 1;
|
"net.ipv6.conf.all.disable_ipv6" = 1;
|
||||||
"net.ipv6.conf.default.disable_ipv6" = 1;
|
"net.ipv6.conf.default.disable_ipv6" = 1;
|
||||||
"net.ipv6.conf.lo.disable_ipv6" = 1;
|
"net.ipv6.conf.lo.disable_ipv6" = 1;
|
||||||
"net.ipv4.ip_forward" = 1;
|
|
||||||
"net.ipv4.conf.all.forwarding" = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.tailscale-ethtool-tweaks = {
|
|
||||||
description = "Apply ethtool tweaks for Tailscale subnet routing performance";
|
|
||||||
wantedBy = ["multi-user.target"];
|
|
||||||
after = ["network-online.target"];
|
|
||||||
wants = ["network-online.target"];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
RemainAfterExit = true;
|
|
||||||
ExecStart = pkgs.writeShellScript "tailscale-ethtool-tweaks" ''
|
|
||||||
NETDEV=$(${pkgs.iproute2}/bin/ip -o route get 1.1.1.1 | ${pkgs.coreutils}/bin/cut -f 5 -d " ")
|
|
||||||
${pkgs.ethtool}/bin/ethtool -K "$NETDEV" rx-udp-gro-forwarding on rx-gro-list off
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,7 @@
|
||||||
nixpkgs.config.packageOverrides = pkgs: {
|
nixpkgs.config.packageOverrides = pkgs: {
|
||||||
zfs = pkgs.zfs_unstable;
|
zfs = pkgs.zfs_unstable;
|
||||||
};
|
};
|
||||||
boot.kernelPackages = pkgs.linuxPackages;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
boot.zfs.forceImportRoot = false;
|
|
||||||
hardware.firmware = with pkgs; [
|
hardware.firmware = with pkgs; [
|
||||||
ipu6-camera-bins
|
ipu6-camera-bins
|
||||||
ivsc-firmware
|
ivsc-firmware
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ in {
|
||||||
imports = [
|
imports = [
|
||||||
(import ../Common/default.nix {inherit inputs pkgs config;})
|
(import ../Common/default.nix {inherit inputs pkgs config;})
|
||||||
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
||||||
|
(import ../Common/nfs.nix {inherit pkgs serverIP;})
|
||||||
(import ../Common/zfs.nix {inherit inputs pkgs config;})
|
(import ../Common/zfs.nix {inherit inputs pkgs config;})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
boot.initrd.kernelModules = [];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = ["kvm-intel"];
|
boot.kernelModules = ["kvm-intel"];
|
||||||
boot.extraModulePackages = [];
|
boot.extraModulePackages = [];
|
||||||
boot.zfs.forceImportRoot = false;
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "rpool/root";
|
device = "rpool/root";
|
||||||
|
|
|
||||||
|
|
@ -15,17 +15,15 @@
|
||||||
vulkan-extension-layer
|
vulkan-extension-layer
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
# programs.hyprland = {
|
programs.hyprland = {
|
||||||
# enable = true;
|
enable = true;
|
||||||
# withUWSM = true;
|
withUWSM = true;
|
||||||
# };
|
};
|
||||||
programs.niri.enable = true;
|
|
||||||
services.greetd = {
|
services.greetd = {
|
||||||
enable = pkgs.lib.mkDefault true;
|
enable = pkgs.lib.mkDefault true;
|
||||||
settings = rec {
|
settings = rec {
|
||||||
initial_session = {
|
initial_session = {
|
||||||
# command = "uwsm start hyprland-uwsm.desktop";
|
command = "uwsm start hyprland-uwsm.desktop";
|
||||||
command = "niri-session";
|
|
||||||
user = "user";
|
user = "user";
|
||||||
};
|
};
|
||||||
default_session = initial_session;
|
default_session = initial_session;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ in {
|
||||||
# (import ../Common/nvidia.nix { inherit inputs pkgs config; })
|
# (import ../Common/nvidia.nix { inherit inputs pkgs config; })
|
||||||
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
(import ../Common/desktop.nix {inherit inputs pkgs config;})
|
||||||
(import ../Common/nfs.nix {inherit pkgs serverIP;})
|
(import ../Common/nfs.nix {inherit pkgs serverIP;})
|
||||||
|
(import ../Common/android.nix {inherit pkgs;})
|
||||||
];
|
];
|
||||||
|
|
||||||
# Kernel
|
# Kernel
|
||||||
|
|
@ -39,6 +40,7 @@ in {
|
||||||
nixpkgs.config.rocmSupport = true;
|
nixpkgs.config.rocmSupport = true;
|
||||||
services.ollama = {
|
services.ollama = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
acceleration = "rocm";
|
||||||
};
|
};
|
||||||
# nixpkgs.config.cudaSupport = true;
|
# nixpkgs.config.cudaSupport = true;
|
||||||
services.logind.settings.Login = {
|
services.logind.settings.Login = {
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,19 @@
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
(import ../Common/default.nix {inherit inputs config pkgs;})
|
(import ../Common/default.nix {inherit inputs config pkgs;})
|
||||||
|
(import ../Common/nvidia.nix {inherit pkgs config;})
|
||||||
|
# (import ../Common/desktop.nix { inherit inputs pkgs config; })
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
# services.sunshine = {
|
||||||
|
# enable = true;
|
||||||
|
# autoStart = false;
|
||||||
|
# capSysAdmin = true;
|
||||||
|
# openFirewall = true;
|
||||||
|
# };
|
||||||
|
|
||||||
boot.kernelParams = ["mitigations=off"];
|
boot.kernelParams = ["mitigations=off"];
|
||||||
|
|
||||||
zramSwap.enable = true;
|
zramSwap.enable = true;
|
||||||
|
|
@ -36,19 +46,14 @@
|
||||||
};
|
};
|
||||||
fileSystems."/home/user/Workspace" = {
|
fileSystems."/home/user/Workspace" = {
|
||||||
device = "/home/server/Workspace";
|
device = "/home/server/Workspace";
|
||||||
fsType = "none";
|
|
||||||
options = ["bind"];
|
options = ["bind"];
|
||||||
};
|
};
|
||||||
services.resolved = {
|
services.resolved = {
|
||||||
enable = false;
|
enable = false;
|
||||||
};
|
};
|
||||||
networking.nameservers = ["192.168.1.2"];
|
networking.nameservers = ["192.168.1.2"];
|
||||||
services.tailscale = {
|
programs.steam = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraUpFlags = [
|
gamescopeSession.enable = true;
|
||||||
"--login-server=https://headscale.thomasave.be"
|
|
||||||
"--accept-routes"
|
|
||||||
];
|
|
||||||
authKeyFile = "/home/user/.secrets/Tailscale/Riva/authkey";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue