Bunch of stuff
parent
524e2c99d5
commit
3f2b2f2a20
|
@ -0,0 +1,3 @@
|
|||
(defpoll time :interval "10s" "date '+%H:%M'")
|
||||
(defpoll year :interval "10h" "date '+%Y'")
|
||||
(defpoll date :interval "30m" "date '+%m-%d'")
|
|
@ -0,0 +1,87 @@
|
|||
(defwidget notifications []
|
||||
(eventbox :class "notifications"
|
||||
""
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget audio []
|
||||
(eventbox :class "audio"
|
||||
:onclick "eww open --toggle audio"
|
||||
""
|
||||
))
|
||||
|
||||
(defwidget clipboard []
|
||||
(eventbox :class "clipboard"
|
||||
""
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget left []
|
||||
(box :class "left"
|
||||
:space-evenly "false"
|
||||
:halign "start"
|
||||
:valign "center"
|
||||
:orientation "h"
|
||||
(notifications)
|
||||
(audio)
|
||||
(clipboard)
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget workspace-indicator []
|
||||
". . . . . . . . . ."
|
||||
)
|
||||
|
||||
(defwidget center []
|
||||
(box :class "center"
|
||||
:space-evenly "false"
|
||||
:halign "center"
|
||||
:valign "center"
|
||||
:orientation "h"
|
||||
(workspace-indicator)
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget time []
|
||||
(eventbox :class "time"
|
||||
time
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget date []
|
||||
(eventbox :class "date"
|
||||
"${year}-${date}"
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget right []
|
||||
(box :class "right"
|
||||
:space-evenly "false"
|
||||
:halign "end"
|
||||
:valign "center"
|
||||
:orientation "v"
|
||||
(time)
|
||||
(date)
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget bar []
|
||||
(box :class "bar"
|
||||
:orientation "h"
|
||||
(left)
|
||||
(center)
|
||||
(right)
|
||||
)
|
||||
)
|
||||
|
||||
(defwindow bar
|
||||
:monitor 2
|
||||
:geometry (geometry :x "0px"
|
||||
:y "10px"
|
||||
:width "1060px"
|
||||
:height "48px"
|
||||
:anchor "center top")
|
||||
:stacking "fg"
|
||||
:exclusive true
|
||||
(bar)
|
||||
)
|
|
@ -0,0 +1,2 @@
|
|||
(include "_variables.yuck")
|
||||
(include "bar.yuck")
|
|
@ -0,0 +1,15 @@
|
|||
{ inputs
|
||||
, lib
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
programs.eww = {
|
||||
enable = true;
|
||||
package = pkgs.eww-wayland;
|
||||
|
||||
configDir = ./config;
|
||||
};
|
||||
}
|
293
flake.lock
293
flake.lock
|
@ -1,5 +1,82 @@
|
|||
{
|
||||
"nodes": {
|
||||
"coq-8_18": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"vscoq",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694096282,
|
||||
"narHash": "sha256-WhiBs4nzPHQ0R24xAdM49kmxSCPOxiOVMA1iiMYunz4=",
|
||||
"owner": "coq",
|
||||
"repo": "coq",
|
||||
"rev": "f022d5d194cb42c2321ea91cecbcce703a9bcad3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "coq",
|
||||
"ref": "V8.18.0",
|
||||
"repo": "coq",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"discord-screenaudio": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1698432393,
|
||||
"narHash": "sha256-pD3NtDRqpi3too7jKGvno9QkYN6pSbP/hycRqS2SwaE=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "3f3f17949d13f479c2f21573d5471b5ecf33c633",
|
||||
"revCount": 178,
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "ssh://git@github.com/maltejur/discord-screenaudio?tag=v1.9.2"
|
||||
},
|
||||
"original": {
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "ssh://git@github.com/maltejur/discord-screenaudio?tag=v1.9.2"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681202837,
|
||||
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1689068808,
|
||||
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
@ -7,44 +84,119 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1695108154,
|
||||
"narHash": "sha256-gSg7UTVtls2yO9lKtP0yb66XBHT1Fx5qZSZbGMpSn2c=",
|
||||
"lastModified": 1704309533,
|
||||
"narHash": "sha256-n/krnzgnmYWdVoMv0MJfEMTOYCkoY13rCwKhQ4RVd2U=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "07682fff75d41f18327a871088d20af2710d4744",
|
||||
"rev": "992b38f29cd7e50d88a2ae069133750beda010a4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-23.05",
|
||||
"ref": "master",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-protocols": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"xdg-desktop-portal-hyprland",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": [
|
||||
"xdg-desktop-portal-hyprland",
|
||||
"systems"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1691753796,
|
||||
"narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprland-protocols",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprlang": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704287638,
|
||||
"narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"rev": "6624f2bb66d4d27975766e81f77174adbe58ec97",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "hyprlang",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1698562188,
|
||||
"narHash": "sha256-9nkxGnA/T+jLhHAMFRW157Qi/zfbf5dF1q7HfKROl3o=",
|
||||
"lastModified": 1703961334,
|
||||
"narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3e10c80821dedb93592682379f476745f370a58e",
|
||||
"rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-23.05",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1702645756,
|
||||
"narHash": "sha256-qKI6OR3TYJYQB3Q8mAZ+DG4o/BR9ptcv9UnRV2hzljc=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "40c3c94c241286dd2243ea34d3aef8a488f9e4d0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-harpoon1": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1703631439,
|
||||
"narHash": "sha256-SIqssvuNnkw1YbEEElLYCHmh9OLnoHzggXNIZMb3jYI=",
|
||||
"owner": "ThePrimeagen",
|
||||
"repo": "harpoon",
|
||||
"rev": "ccae1b9bec717ae284906b0bf83d720e59d12b91",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ThePrimeagen",
|
||||
"repo": "harpoon",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-rainbow-delimiters-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1698573782,
|
||||
"narHash": "sha256-rJOWVz1cplThmx9HY7RqYSxUgKKq1yjzhS4Pb2ebFQ4=",
|
||||
"lastModified": 1704196511,
|
||||
"narHash": "sha256-sUB85XGP3XQvF3TcdLhKLCDoSTFOeOlUiptK9DjYYqE=",
|
||||
"owner": "HiPhish",
|
||||
"repo": "rainbow-delimiters.nvim",
|
||||
"rev": "df8cdf68234fbf056202a9684931c3dfa89988c1",
|
||||
"rev": "4a90ac83c7c8e0ba8a1b6af38bed6d5ee1b04e08",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
|
@ -56,11 +208,11 @@
|
|||
"plugin-undotree-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1695641489,
|
||||
"narHash": "sha256-1d7OMaWsf0MW6w6Yzev9b3qF6Va4y8VNciSEdWq+VxY=",
|
||||
"lastModified": 1703849391,
|
||||
"narHash": "sha256-clxoKM5kusRz8OR5+Z+4NS0WsoMx9tdyi9GG+sE6r3s=",
|
||||
"owner": "jiaoshijie",
|
||||
"repo": "undotree",
|
||||
"rev": "41f56b30cc774ad26c4945c7e10673453893e7ad",
|
||||
"rev": "80552a0180b49e5ba072c89ae91ce5d4e3aed36b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -69,12 +221,123 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-vscoq-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1702025258,
|
||||
"narHash": "sha256-0ozz2vxmuEym/pR6AftgIZBt4fT4qJxEpngtZXqXT30=",
|
||||
"owner": "tomtomjhj",
|
||||
"repo": "vscoq.nvim",
|
||||
"rev": "0dee175a75153fc6057605c90749e0d6eb131cd4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tomtomjhj",
|
||||
"repo": "vscoq.nvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"discord-screenaudio": "discord-screenaudio",
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"plugin-harpoon1": "plugin-harpoon1",
|
||||
"plugin-rainbow-delimiters-nvim": "plugin-rainbow-delimiters-nvim",
|
||||
"plugin-undotree-nvim": "plugin-undotree-nvim"
|
||||
"plugin-undotree-nvim": "plugin-undotree-nvim",
|
||||
"plugin-vscoq-nvim": "plugin-vscoq-nvim",
|
||||
"vscoq": "vscoq",
|
||||
"xdg-desktop-portal-hyprland": "xdg-desktop-portal-hyprland"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"vscoq": {
|
||||
"inputs": {
|
||||
"coq-8_18": "coq-8_18",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701447720,
|
||||
"narHash": "sha256-VXhHCP6Ni5/OcsgoI1EbJfYCpXzwkuR8kbbKrl6dfjU=",
|
||||
"owner": "coq-community",
|
||||
"repo": "vscoq",
|
||||
"rev": "d4a702e676f2d17952e82df27962736d10810c37",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "coq-community",
|
||||
"repo": "vscoq",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"xdg-desktop-portal-hyprland": {
|
||||
"inputs": {
|
||||
"hyprland-protocols": "hyprland-protocols",
|
||||
"hyprlang": "hyprlang",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704308317,
|
||||
"narHash": "sha256-/3IcC3oi0MPtC9OyE687HI/a7vat3m9Sx67I85tTcdI=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"rev": "bd110073cfe6ac3ce756c1577af78d672f89e853",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "xdg-desktop-portal-hyprland",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
66
flake.nix
66
flake.nix
|
@ -3,12 +3,15 @@
|
|||
|
||||
inputs = {
|
||||
# Nixpkgs
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
# Home manager
|
||||
home-manager.url = "github:nix-community/home-manager/release-23.05";
|
||||
home-manager.url = "github:nix-community/home-manager/master";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
# VS Coq language server
|
||||
vscoq.url = "github:coq-community/vscoq";
|
||||
vscoq.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
# Neovim plugins not in nixpkgs
|
||||
plugin-rainbow-delimiters-nvim.url = "gitlab:HiPhish/rainbow-delimiters.nvim";
|
||||
|
@ -16,30 +19,47 @@
|
|||
|
||||
plugin-undotree-nvim.url = "github:jiaoshijie/undotree";
|
||||
plugin-undotree-nvim.flake = false;
|
||||
|
||||
plugin-vscoq-nvim.url = "github:tomtomjhj/vscoq.nvim";
|
||||
plugin-vscoq-nvim.flake = false;
|
||||
|
||||
plugin-harpoon1.url = "github:ThePrimeagen/harpoon";
|
||||
plugin-harpoon1.flake = false;
|
||||
|
||||
# Discord screen audio
|
||||
discord-screenaudio.url = "git+ssh://git@github.com/maltejur/discord-screenaudio?tag=v1.9.2&submodules=1";
|
||||
discord-screenaudio.flake = false;
|
||||
|
||||
# Track hyprland xdg desktop portal master until screenshots get released again
|
||||
xdg-desktop-portal-hyprland.url = "github:hyprwm/xdg-desktop-portal-hyprland";
|
||||
xdg-desktop-portal-hyprland.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
};
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
home-manager,
|
||||
...
|
||||
} @ inputs : let
|
||||
inherit (self) outputs;
|
||||
in {
|
||||
overlays = import ./overlays {inherit inputs;};
|
||||
outputs =
|
||||
{ self
|
||||
, nixpkgs
|
||||
, home-manager
|
||||
, ...
|
||||
} @ inputs:
|
||||
let
|
||||
inherit (self) outputs;
|
||||
in
|
||||
{
|
||||
overlays = import ./overlays { inherit inputs; };
|
||||
|
||||
nixosConfigurations = {
|
||||
"kalle-pc" = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
modules = [ ./nixos/kalle-pc/configuration.nix ];
|
||||
nixosConfigurations = {
|
||||
"kalle-pc" = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = { inherit inputs outputs; };
|
||||
modules = [ ./nixos/kalle-pc/configuration.nix ];
|
||||
};
|
||||
};
|
||||
homeConfigurations = {
|
||||
"kalle@kalle-pc" = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||
extraSpecialArgs = { inherit inputs outputs; };
|
||||
modules = [ ./home-manager/kalle-pc/kalle.nix ];
|
||||
};
|
||||
};
|
||||
};
|
||||
homeConfigurations = {
|
||||
"kalle@kalle-pc" = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs.legacyPackages.x86_64-linux;
|
||||
extraSpecialArgs = {inherit inputs outputs;};
|
||||
modules = [ ./home-manager/kalle-pc/kalle.nix ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -11,15 +11,223 @@
|
|||
username = "kalle";
|
||||
homeDirectory = "/home/kalle";
|
||||
};
|
||||
|
||||
imports =
|
||||
[
|
||||
../../nvim
|
||||
../../eww
|
||||
../../hyprland
|
||||
../../hyprland/hyprpaper.nix
|
||||
];
|
||||
|
||||
hyprland =
|
||||
let
|
||||
mod = "SUPER"; in
|
||||
{
|
||||
mod = mod;
|
||||
|
||||
primaryMonitor = "DP-2";
|
||||
|
||||
monitors = [
|
||||
{
|
||||
name = "DP-2";
|
||||
width = 1920;
|
||||
height = 1080;
|
||||
refreshRate = 144;
|
||||
x = 0;
|
||||
y = 1080;
|
||||
vrr = 1;
|
||||
}
|
||||
|
||||
{
|
||||
name = "HDMI-A-1";
|
||||
width = 1920;
|
||||
height = 1080;
|
||||
x = 1500;
|
||||
y = 0;
|
||||
}
|
||||
|
||||
{
|
||||
name = "HDMI-A-2";
|
||||
width = 1920;
|
||||
height = 1080;
|
||||
x = 1920;
|
||||
y = 1080;
|
||||
transform = 3;
|
||||
}
|
||||
];
|
||||
|
||||
autoStart = [
|
||||
# Bar
|
||||
"${pkgs.dunst}/bin/dunst"
|
||||
"${pkgs.firefox}/bin/firefox"
|
||||
"${pkgs.discord}/bin/discord"
|
||||
];
|
||||
|
||||
environment = {
|
||||
XCURSOR_SIZE = "24";
|
||||
QT_QPA_PLATFORMTHEME = "qt5ct";
|
||||
};
|
||||
|
||||
sensitivity = 0.1;
|
||||
|
||||
keyboard = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
options = "";
|
||||
};
|
||||
|
||||
inner_gaps = 5;
|
||||
outer_gaps = 10;
|
||||
|
||||
border = {
|
||||
size = 1;
|
||||
active = "rgba(33ccffee) rgba(00ff99ee) 45deg";
|
||||
inactive = "rgba(595959aa)";
|
||||
};
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
rounding = 5;
|
||||
|
||||
layerRules = {
|
||||
"gtk-layer-shell" = [ "blur" "ignorezero" ];
|
||||
};
|
||||
|
||||
windowRules = {
|
||||
# Auto workspace
|
||||
firefox = [ "workspace 1 silent" ];
|
||||
discord = [ "workspace name:HDMI-A-2" ];
|
||||
};
|
||||
|
||||
|
||||
windowRulesV2 = {
|
||||
# ULauncher
|
||||
"class:^(ulauncher)$" = [
|
||||
"forceinput"
|
||||
"dimaround"
|
||||
];
|
||||
};
|
||||
|
||||
# Media keys
|
||||
# bind = ,XF86AudioPlay, exec, playerctl --player plasma-browser-integration play-pause
|
||||
# bind = ,XF86AudioPrev, exec, playerctl previous
|
||||
# bind = ,XF86AudioNext, exec, playerctl next
|
||||
# bind = ,XF86AudioLowerVolume, exec, playerctl --player plasma-browser-integration volume 0.01-
|
||||
# bind = ,XF86AudioRaiseVolume, exec, playerctl --player plasma-browser-integration volume 0.01+
|
||||
|
||||
# This is a dumb work around for hyprland not passing ALT half the time with the pass dispatcher.
|
||||
# bind = ALT, M, exec, xdotool key 'ALT+m'
|
||||
# bind = ALT, B, exec, xdotool key 'ALT+b'
|
||||
binds = {
|
||||
"${mod}, return" = "exec, kitty";
|
||||
"${mod}, E" = "exec, ulauncher-toggle #wofi --show drun";
|
||||
"${mod}, Print" = "exec, bash -c \"grim -g \\\"$(slurp)\\\" - | wl-copy\"";
|
||||
# Clipboard history
|
||||
# bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
|
||||
};
|
||||
|
||||
mouseBinds = { };
|
||||
};
|
||||
|
||||
hyprpaper = {
|
||||
wallpaperFolder = "/home/kalle/Pictures/Wallpapers";
|
||||
};
|
||||
|
||||
services.dunst = {
|
||||
enable = true;
|
||||
settings = {
|
||||
global = {
|
||||
monitor = 0;
|
||||
follow = "none";
|
||||
width = 300;
|
||||
height = 300;
|
||||
origin = "top-left";
|
||||
offset = "10x10";
|
||||
scale = 0;
|
||||
notification_limit = 20;
|
||||
progress_bar = true;
|
||||
progress_bar_height = 10;
|
||||
progress_bar_frame_width = 0;
|
||||
progress_bar_min_width = 150;
|
||||
progress_bar_max_width = 300;
|
||||
progress_bar_corner_radius = 0;
|
||||
icon_corner_radius = 0;
|
||||
indicate_hidden = "yes";
|
||||
transparency = "0.3";
|
||||
separator_height = 2;
|
||||
padding = 8;
|
||||
horizontal_padding = 8;
|
||||
text_icon_padding = 0;
|
||||
frame_width = 0;
|
||||
frame_color = "#aaaaaa";
|
||||
gap_size = 10;
|
||||
separator_color = "frame";
|
||||
sort = "yes";
|
||||
font = "Monospace 8";
|
||||
line_height = 0;
|
||||
markup = "full";
|
||||
format = "<b>%s</b>\n%b";
|
||||
alignment = "left";
|
||||
vertical_alignment = "center";
|
||||
show_age_threshold = 60;
|
||||
ellipsize = "middle";
|
||||
ignore_newline = "no";
|
||||
stack_duplicates = true;
|
||||
hide_duplicate_count = false;
|
||||
show_indicators = "yes";
|
||||
enable_recursive_icon_lookup = true;
|
||||
icon_theme = "Adwaita";
|
||||
icon_position = "left";
|
||||
min_icon_size = 32;
|
||||
max_icon_size = 128;
|
||||
icon_path = "/usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/";
|
||||
sticky_history = "yes";
|
||||
history_length = 20;
|
||||
dmenu = "/usr/bin/dmenu -p dunst:";
|
||||
browser = "/usr/bin/xdg-open";
|
||||
always_run_script = true;
|
||||
title = "Dunst";
|
||||
class = "Dunst";
|
||||
corner_radius = 0;
|
||||
ignore_dbusclose = false;
|
||||
force_xwayland = false;
|
||||
force_xinerama = false;
|
||||
mouse_left_click = "close_current";
|
||||
mouse_middle_click = "do_action, close_current";
|
||||
mouse_right_click = "close_all";
|
||||
};
|
||||
|
||||
experimental = {
|
||||
per_monitor_dpi = false;
|
||||
};
|
||||
|
||||
|
||||
urgency_low = {
|
||||
background = "#222222";
|
||||
foreground = "#888888";
|
||||
timeout = 10;
|
||||
};
|
||||
|
||||
urgency_normal = {
|
||||
background = "#285577";
|
||||
foreground = "#ffffff";
|
||||
timeout = 10;
|
||||
};
|
||||
|
||||
urgency_critical = {
|
||||
background = "#900000";
|
||||
foreground = "#ffffff";
|
||||
frame_color = "#ff0000";
|
||||
timeout = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs = {
|
||||
overlays = with outputs.overlays; [
|
||||
nvim-plugins
|
||||
discord-screenaudio
|
||||
];
|
||||
|
||||
config = {
|
||||
|
@ -32,20 +240,78 @@
|
|||
# environment.
|
||||
home.packages = with pkgs; [
|
||||
discord
|
||||
# discord-screenaudio # Not working with some EGL error
|
||||
firefox
|
||||
chromium
|
||||
httpie
|
||||
kate
|
||||
kitty
|
||||
dolphin
|
||||
ark
|
||||
rustup
|
||||
gcc
|
||||
prismlauncher
|
||||
pavucontrol
|
||||
coq_8_18
|
||||
difftastic
|
||||
sops
|
||||
|
||||
cachix
|
||||
];
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
programs.bash.enable = true;
|
||||
|
||||
programs.bash = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
# Git aliases
|
||||
gg = "git log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an (%ae)%C(reset)' --all";
|
||||
gca = "git add -A; git commit -a --amend --no-edit";
|
||||
gs = "git status";
|
||||
|
||||
# Replace some commands with better versions
|
||||
ssh = "kitty +kitten ssh";
|
||||
diff = "${pkgs.difftastic}/bin/difftastic";
|
||||
};
|
||||
initExtra = ''
|
||||
function open() {
|
||||
xdg-open $@ &> /dev/null &
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
theme = "Catppuccin-Mocha";
|
||||
settings = {
|
||||
background_opacity = "0.8";
|
||||
allow_remote_control = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
add_newline = true;
|
||||
|
||||
# Remove text from nix shell component
|
||||
nix_shell.format = "via [$symbol]($style) ";
|
||||
|
||||
git_status.disabled = true;
|
||||
package.disabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Kalle Struik";
|
||||
userEmail = "kalle@kallestruik.nl";
|
||||
difftastic.enable = true;
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
};
|
||||
|
|
|
@ -0,0 +1,429 @@
|
|||
{ inputs
|
||||
, lib
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
options =
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
hyprland = {
|
||||
mod = mkOption {
|
||||
type = types.str;
|
||||
default = "SUPER";
|
||||
};
|
||||
|
||||
autoStart = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
primaryMonitor = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
monitors = mkOption {
|
||||
type = types.listOf (types.submodule {
|
||||
options = {
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
width = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
height = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
refreshRate = mkOption {
|
||||
type = types.int;
|
||||
default = 60;
|
||||
};
|
||||
x = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
y = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
transform = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
vrr = mkOption {
|
||||
type = types.int;
|
||||
default = 0;
|
||||
};
|
||||
enabled = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
});
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
environment = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = { };
|
||||
};
|
||||
|
||||
sensitivity = mkOption {
|
||||
type = types.float;
|
||||
default = 0.0;
|
||||
};
|
||||
|
||||
keyboard = {
|
||||
layout = mkOption {
|
||||
type = types.str;
|
||||
default = "us";
|
||||
};
|
||||
|
||||
variant = mkOption {
|
||||
type = types.str;
|
||||
default = "qwerty";
|
||||
};
|
||||
|
||||
options = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
};
|
||||
};
|
||||
|
||||
inner_gaps = mkOption { type = types.int; };
|
||||
|
||||
outer_gaps = mkOption { type = types.int; };
|
||||
|
||||
border = {
|
||||
size = mkOption { type = types.int; };
|
||||
active = mkOption { type = types.str; };
|
||||
inactive = mkOption { type = types.str; };
|
||||
};
|
||||
|
||||
animations = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
beziers = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [
|
||||
"myBezier, 0.05, 0.9, 0.1, 1.05"
|
||||
];
|
||||
};
|
||||
|
||||
windows = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 3, myBezier";
|
||||
};
|
||||
|
||||
windowsOut = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 3, default, popin 80%";
|
||||
};
|
||||
|
||||
border = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 5, default";
|
||||
};
|
||||
|
||||
borderangle = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 4, default";
|
||||
};
|
||||
|
||||
fade = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 3, default";
|
||||
};
|
||||
|
||||
workspaces = mkOption {
|
||||
type = types.str;
|
||||
default = "1, 2, default";
|
||||
};
|
||||
};
|
||||
|
||||
layout = mkOption { type = types.str; };
|
||||
rounding = mkOption { type = types.int; };
|
||||
|
||||
blur = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
size = mkOption {
|
||||
type = types.int;
|
||||
default = 3;
|
||||
};
|
||||
|
||||
passes = mkOption {
|
||||
type = types.int;
|
||||
default = 1;
|
||||
};
|
||||
};
|
||||
|
||||
shadow = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
range = mkOption {
|
||||
type = types.int;
|
||||
default = 4;
|
||||
};
|
||||
|
||||
strength = mkOption {
|
||||
type = types.int;
|
||||
default = 3;
|
||||
};
|
||||
|
||||
color = mkOption {
|
||||
type = types.str;
|
||||
default = "rgba(1a1a1aee)";
|
||||
};
|
||||
};
|
||||
|
||||
layerRules = mkOption {
|
||||
type = types.attrsOf (types.listOf types.str);
|
||||
default = { };
|
||||
};
|
||||
|
||||
windowRules = mkOption {
|
||||
type = types.attrsOf (types.listOf types.str);
|
||||
default = { };
|
||||
};
|
||||
|
||||
windowRulesV2 = mkOption {
|
||||
type = types.attrsOf (types.listOf types.str);
|
||||
default = { };
|
||||
};
|
||||
|
||||
generateWorkspaceBinds = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
generateWindowManagementBinds = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
};
|
||||
|
||||
binds = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = { };
|
||||
};
|
||||
|
||||
mouseBinds = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
cfg = config.hyprland;
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
wl-clipboard
|
||||
cliphist
|
||||
ulauncher
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
settings = {
|
||||
monitor = map
|
||||
(m:
|
||||
let
|
||||
resolution = "${toString m.width}x${toString m.height}@${toString m.refreshRate}";
|
||||
position = "${toString m.x}x${toString m.y}";
|
||||
vrr = if m.vrr != 0 then ",vrr,${toString m.vrr}" else "";
|
||||
transform = if m.transform != 0 then ",transform,${toString m.transform}" else "";
|
||||
in
|
||||
"${m.name},${if m.enabled then "${resolution},${position},1${vrr}${transform}" else "disable"}"
|
||||
)
|
||||
(cfg.monitors)
|
||||
# Automatically detect newly connected monitors
|
||||
++ [ ",preferred,auto,auto" ];
|
||||
|
||||
exec-once = [
|
||||
"${pkgs.wl-clipboard}/bin/wl-paste --watch ${pkgs.cliphist}/bin/cliphist store"
|
||||
"${pkgs.ulauncher}/bin/ulauncher --no-window-shadow --hide-window"
|
||||
"${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1"
|
||||
# kde-connect (somehow, wasnt working well last time)
|
||||
] ++ cfg.autoStart;
|
||||
|
||||
env = lib.mapAttrsToList (k: v: "${toString k},${v}") cfg.environment;
|
||||
|
||||
input = {
|
||||
kb_layout = cfg.keyboard.layout;
|
||||
kb_variant = cfg.keyboard.variant;
|
||||
kb_options = cfg.keyboard.options;
|
||||
|
||||
follow_mouse = 1;
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = "yes";
|
||||
};
|
||||
|
||||
sensitivity = cfg.sensitivity;
|
||||
accel_profile = "flat";
|
||||
};
|
||||
|
||||
general = {
|
||||
gaps_in = cfg.inner_gaps;
|
||||
gaps_out = cfg.outer_gaps;
|
||||
|
||||
border_size = cfg.border.size;
|
||||
"col.active_border" = cfg.border.active;
|
||||
"col.inactive_border" = cfg.border.inactive;
|
||||
|
||||
layout = cfg.layout;
|
||||
};
|
||||
|
||||
decoration = {
|
||||
rounding = cfg.rounding;
|
||||
|
||||
blur = {
|
||||
enabled = if cfg.blur.enable then "yes" else "no";
|
||||
size = cfg.blur.size;
|
||||
passes = cfg.blur.passes;
|
||||
new_optimizations = "on";
|
||||
};
|
||||
|
||||
drop_shadow = if cfg.shadow.enable then "yes" else "no";
|
||||
shadow_range = cfg.shadow.range;
|
||||
shadow_render_power = cfg.shadow.strength;
|
||||
"col.shadow" = cfg.shadow.color;
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
pseudotile = "yes";
|
||||
preserve_split = "yes";
|
||||
};
|
||||
|
||||
master = {
|
||||
new_is_master = true;
|
||||
};
|
||||
|
||||
gestures = {
|
||||
workspace_swipe = "on";
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = if cfg.animations.enable then "yes" else "no";
|
||||
|
||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = cfg.animations.beziers;
|
||||
|
||||
animation = [
|
||||
"windows, ${cfg.animations.windows}"
|
||||
"windowsOut, ${cfg.animations.windowsOut}"
|
||||
"border, ${cfg.animations.border}"
|
||||
"borderangle, ${cfg.animations.borderangle}"
|
||||
"fade, ${cfg.animations.fade}"
|
||||
"workspaces, ${cfg.animations.workspaces}"
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
layerrule =
|
||||
let
|
||||
y = ident: value: "${value},${ident}";
|
||||
x = ident: values: map (y ident) values;
|
||||
in
|
||||
lib.flatten (lib.mapAttrsToList x cfg.layerRules);
|
||||
|
||||
workspace =
|
||||
let
|
||||
# Create one work space for each non primary monitor
|
||||
perMonitorWorkspaces = map
|
||||
(m: "${m.name}, name:${m.name}")
|
||||
(lib.filter
|
||||
(m: m.name != cfg.primaryMonitor)
|
||||
cfg.monitors
|
||||
);
|
||||
|
||||
# Create 10 work spaces on the primary monitor
|
||||
primaryMonitorWorkspaces = map (i: "${toString i}, monitor:${cfg.primaryMonitor}") (lib.range 1 10);
|
||||
|
||||
in
|
||||
primaryMonitorWorkspaces ++ perMonitorWorkspaces;
|
||||
|
||||
bind =
|
||||
let
|
||||
# Create binds to switch workspaces and move windows between them
|
||||
workspaceBinds =
|
||||
if cfg.generateWorkspaceBinds then
|
||||
lib.flatten
|
||||
(map
|
||||
(i:
|
||||
let
|
||||
k = if i == 10 then 0 else i;
|
||||
in
|
||||
[
|
||||
"${cfg.mod}, ${toString k}, workspace, ${toString i}"
|
||||
"${cfg.mod} SHIFT, ${toString k}, movetoworkspace, ${toString i}"
|
||||
]
|
||||
)
|
||||
(lib.range 1 10)
|
||||
)
|
||||
else
|
||||
[ ];
|
||||
|
||||
# Create binds to manage wiwdows
|
||||
windowManagementBinds =
|
||||
if cfg.generateWindowManagementBinds then [
|
||||
"${cfg.mod} SHIFT, Q, killactive"
|
||||
"${cfg.mod}, F, togglefloating"
|
||||
"${cfg.mod} SHIFT, F, fullscreen"
|
||||
]
|
||||
else
|
||||
[ ];
|
||||
|
||||
configBinds = lib.mapAttrsToList (k: v: "${k}, ${v}") cfg.binds;
|
||||
in
|
||||
configBinds ++ workspaceBinds ++ windowManagementBinds;
|
||||
|
||||
bindm =
|
||||
let
|
||||
windowManagementBinds =
|
||||
if cfg.generateWindowManagementBinds then [
|
||||
"${cfg.mod}, mouse:272, movewindow"
|
||||
"${cfg.mod}, mouse:273, resizewindow"
|
||||
]
|
||||
else
|
||||
[ ];
|
||||
|
||||
configBinds = lib.mapAttrsToList (k: v: "${k}, ${v}") cfg.mouseBinds;
|
||||
|
||||
in
|
||||
configBinds ++ windowManagementBinds;
|
||||
|
||||
windowrule =
|
||||
let
|
||||
y = ident: value: "${value},${ident}";
|
||||
x = ident: values: map (y ident) values;
|
||||
in
|
||||
lib.flatten (lib.mapAttrsToList x cfg.windowRules);
|
||||
|
||||
windowrulev2 =
|
||||
let
|
||||
y = ident: value: "${value},${ident}";
|
||||
x = ident: values: map (y ident) values;
|
||||
in
|
||||
lib.flatten (lib.mapAttrsToList x cfg.windowRulesV2);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
{ inputs
|
||||
, lib
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
options =
|
||||
let
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
hyprpaper = {
|
||||
wallpaperFolder = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
cfg = config.hyprpaper;
|
||||
hyprlandCfg = config.hyprland;
|
||||
|
||||
changeWallpaperScript =
|
||||
pkgs.writeShellScriptBin
|
||||
"change-wallpaper"
|
||||
(lib.concatStringsSep
|
||||
"\n"
|
||||
(lib.flatten
|
||||
(map
|
||||
(m:
|
||||
let
|
||||
output = m.name;
|
||||
wallpaper = "\"$(${pkgs.findutils}/bin/find -L \"${cfg.wallpaperFolder}\" -type f | ${pkgs.coreutils}/bin/shuf -n 1)\"";
|
||||
in
|
||||
[
|
||||
"wallpaper=${wallpaper}"
|
||||
"${pkgs.hyprland}/bin/hyprctl hyprpaper preload $wallpaper"
|
||||
"${pkgs.hyprland}/bin/hyprctl hyprpaper wallpaper ${output},$wallpaper"
|
||||
]
|
||||
)
|
||||
hyprlandCfg.monitors)
|
||||
++ [ "${pkgs.hyprland}/bin/hyprctl hyprpaper unload all" ])
|
||||
);
|
||||
in
|
||||
{
|
||||
hyprland.autoStart = [
|
||||
"${pkgs.hyprpaper}/bin/hyprpaper"
|
||||
"sleep 2; ${changeWallpaperScript}/bin/change-wallpaper"
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
hyprpaper
|
||||
changeWallpaperScript
|
||||
];
|
||||
};
|
||||
}
|
|
@ -1,8 +1,13 @@
|
|||
{ config, pkgs, ... }:
|
||||
{ inputs
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
[
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
./hardware-configuration.override.nix
|
||||
];
|
||||
|
@ -30,23 +35,33 @@
|
|||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
console = {
|
||||
font = "Lat2-Terminus16";
|
||||
useXkbConfig = true; # use xkbOptions in tty.
|
||||
};
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
|
||||
displayManager.sddm.enable = true;
|
||||
|
||||
# Enable the Plasma 5 Desktop Environment.
|
||||
services.xserver.displayManager.sddm.enable = true;
|
||||
services.xserver.desktopManager.plasma5.enable = true;
|
||||
|
||||
# Configure keymap in X11
|
||||
layout = "us";
|
||||
# xkbVariant = "dvorak";
|
||||
# xkbOptions = "eurosign:e,caps:escape";
|
||||
};
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.layout = "dvorak";
|
||||
services.xserver.xkbOptions = "eurosign:e,caps:escape";
|
||||
# Allow flashing ZSA keyboards
|
||||
hardware.keyboard.zsa.enable = true;
|
||||
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
portalPackage = inputs.xdg-desktop-portal-hyprland.packages.x86_64-linux.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
|
||||
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = true;
|
||||
|
@ -71,10 +86,54 @@
|
|||
|
||||
environment.systemPackages = with pkgs; [
|
||||
xdg-user-dirs
|
||||
|
||||
grim # For xdg-desktop-portal-hyprland which does not declare this dependency
|
||||
slurp # Some for this one
|
||||
|
||||
qemu_full
|
||||
gamescope
|
||||
];
|
||||
|
||||
fonts = {
|
||||
enableDefaultPackages = true;
|
||||
packages = with pkgs; [
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-color-emoji
|
||||
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
|
||||
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
|
||||
];
|
||||
|
||||
fontconfig = {
|
||||
defaultFonts = {
|
||||
serif = [ "Noto Serif" "Symbols Nerd Font" ];
|
||||
sansSerif = [ "Noto Sans" "Symbols Nerd Font" ];
|
||||
monospace = [ "Fira Code" "Symbols Nerd Font Mono" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Steam needs to be installed on system level, because reasons
|
||||
programs.steam.enable = true;
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
package = pkgs.steam.override {
|
||||
extraPkgs = pkgs: with pkgs; [
|
||||
xorg.libXcursor
|
||||
xorg.libXi
|
||||
xorg.libXinerama
|
||||
xorg.libXScrnSaver
|
||||
libpng
|
||||
libpulseaudio
|
||||
libvorbis
|
||||
stdenv.cc.cc.lib
|
||||
libkrb5
|
||||
keyutils
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
|
|
|
@ -19,14 +19,22 @@
|
|||
vimdiffAlias = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
nodejs_21 # Required for copilot-vim
|
||||
ripgrep # Required for telescope
|
||||
wl-clipboard # Required for clipboard sync
|
||||
|
||||
# Language servers
|
||||
clang-tools
|
||||
lua-language-server
|
||||
rnix-lsp
|
||||
|
||||
ripgrep
|
||||
wl-clipboard
|
||||
nodePackages.typescript-language-server
|
||||
tailwindcss-language-server
|
||||
inputs.vscoq.packages.x86_64-linux.vscoq-language-server
|
||||
];
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
yuck-vim
|
||||
|
||||
{
|
||||
plugin = which-key-nvim;
|
||||
config = toLua "require('which-key').setup()";
|
||||
|
@ -35,14 +43,20 @@
|
|||
neodev-nvim
|
||||
plenary-nvim
|
||||
|
||||
telescope-nvim
|
||||
{
|
||||
plugin = telescope-nvim;
|
||||
config = toLuaFile ./plugin/telescope.lua;
|
||||
}
|
||||
telescope-ui-select-nvim
|
||||
|
||||
FTerm-nvim
|
||||
|
||||
neogit
|
||||
{
|
||||
plugin = neogit;
|
||||
config = toLua "require('neogit').setup()";
|
||||
}
|
||||
|
||||
harpoon
|
||||
harpoon1
|
||||
|
||||
{
|
||||
plugin = undotree-nvim;
|
||||
|
@ -75,6 +89,7 @@
|
|||
cmp-git
|
||||
cmp-calc
|
||||
cmp_luasnip
|
||||
copilot-cmp
|
||||
luasnip
|
||||
friendly-snippets
|
||||
{
|
||||
|
@ -96,23 +111,29 @@
|
|||
rainbow-delimiters-nvim
|
||||
|
||||
{
|
||||
plugin = (nvim-treesitter.withPlugins (p: [
|
||||
p.tree-sitter-nix
|
||||
p.tree-sitter-vim
|
||||
p.tree-sitter-bash
|
||||
p.tree-sitter-lua
|
||||
p.tree-sitter-python
|
||||
p.tree-sitter-json
|
||||
p.tree-sitter-yaml
|
||||
p.tree-sitter-rust
|
||||
p.tree-sitter-javascript
|
||||
p.tree-sitter-typescript
|
||||
p.tree-sitter-c
|
||||
p.tree-sitter-cpp
|
||||
]));
|
||||
plugin = (nvim-treesitter.withAllGrammars);
|
||||
config = toLuaFile ./plugin/treesitter.lua;
|
||||
}
|
||||
|
||||
{
|
||||
plugin = Coqtail;
|
||||
# Don't load Coqtail with neovim
|
||||
config = ''
|
||||
let g:loaded_coqtail = 1
|
||||
let g:coqtail#supported = 0
|
||||
'';
|
||||
}
|
||||
vscoq-nvim
|
||||
|
||||
{
|
||||
plugin = copilot-lua;
|
||||
config = toLua ''
|
||||
require("copilot").setup({
|
||||
suggestion = { enabled = false },
|
||||
panel = { enabled = false },
|
||||
})
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
extraLuaConfig = ''
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
local cmp = require 'cmp'
|
||||
local luasnip = require 'luasnip'
|
||||
|
||||
require("copilot_cmp").setup()
|
||||
|
||||
local has_words_before = function()
|
||||
if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then return false end
|
||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match("^%s*$") == nil
|
||||
end
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
|
@ -21,7 +29,7 @@ cmp.setup({
|
|||
end
|
||||
end, { 'i', 's' }),
|
||||
['<Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
if cmp.visible() and has_words_before() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
|
@ -39,6 +47,7 @@ cmp.setup({
|
|||
})
|
||||
}),
|
||||
sources = cmp.config.sources({
|
||||
{ name = "copilot", group_index = 2 },
|
||||
{ name = 'path' }, -- file paths
|
||||
{ name = 'nvim_lsp' }, -- from language server
|
||||
{ name = 'nvim_lsp_signature_help' }, -- display function signatures with current parameter emphasized
|
||||
|
|
|
@ -67,6 +67,10 @@ vim.diagnostic.config({
|
|||
},
|
||||
})
|
||||
|
||||
vim.cmd([[
|
||||
autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false })
|
||||
]])
|
||||
|
||||
-- LSP Configuration
|
||||
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
@ -101,6 +105,21 @@ require('lspconfig').rnix.setup {
|
|||
capabilities = capabilities,
|
||||
}
|
||||
|
||||
require('lspconfig').tsserver.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
|
||||
require('lspconfig').tailwindcss.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
|
||||
require('lspconfig').clangd.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
|
||||
require('rust-tools').setup({
|
||||
server = {
|
||||
on_attach = on_attach,
|
||||
|
@ -113,3 +132,20 @@ require('rust-tools').setup({
|
|||
}
|
||||
},
|
||||
})
|
||||
|
||||
require 'vscoq'.setup {
|
||||
-- Configuration for vscoq, used in both the client and the server.
|
||||
-- See "configuration" in https://github.com/coq-community/vscoq/blob/main/client/package.json.
|
||||
-- The following is an example.
|
||||
vscoq = {
|
||||
proof = {
|
||||
mode = 1, -- automatic mode
|
||||
},
|
||||
},
|
||||
|
||||
-- The configuration forwarded to `:help lspconfig-setup`.
|
||||
-- The following is an example.
|
||||
lsp = {
|
||||
on_attach = on_attach,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
require('telescope').setup {
|
||||
defaults = {
|
||||
mappings = {
|
||||
i = {
|
||||
['<C-u>'] = false,
|
||||
['<C-d>'] = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
require("telescope").load_extension("ui-select")
|
||||
pcall(require('telescope').load_extension, 'fzf')
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
inputs,
|
||||
...
|
||||
{ inputs
|
||||
, ...
|
||||
}:
|
||||
|
||||
{
|
||||
|
@ -15,6 +14,56 @@
|
|||
name = "undotree.nvim";
|
||||
src = inputs.plugin-undotree-nvim;
|
||||
};
|
||||
|
||||
vscoq-nvim = prev.vimUtils.buildVimPlugin {
|
||||
name = "vscoq.nvim";
|
||||
src = inputs.plugin-vscoq-nvim;
|
||||
};
|
||||
|
||||
harpoon1 = prev.vimUtils.buildVimPlugin {
|
||||
name = "harpoon";
|
||||
src = inputs.plugin-harpoon1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
discord-screenaudio = final: prev: {
|
||||
discord-screenaudio = prev.stdenv.mkDerivation
|
||||
rec {
|
||||
pname = "discord-screenaudio";
|
||||
version = "1.9.1";
|
||||
|
||||
src = inputs.discord-screenaudio;
|
||||
|
||||
nativeBuildInputs = with prev; [
|
||||
qt6.wrapQtAppsHook
|
||||
cmake
|
||||
pkg-config
|
||||
qt6.qtbase
|
||||
qt6.qtwebengine
|
||||
];
|
||||
|
||||
buildInputs = with prev; [
|
||||
pipewire
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
# version.cmake either uses git tags or a version.txt file to get app version.
|
||||
# Since cmake can't access git tags, write the version to a version.txt ourselves.
|
||||
echo "${version}" > version.txt
|
||||
'';
|
||||
|
||||
passthru.updateScript = prev.nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "A custom discord client that supports streaming with audio on Linux";
|
||||
homepage = "https://github.com/maltejur/discord-screenaudio";
|
||||
downloadPage = "https://github.com/maltejur/discord-screenaudio/releases";
|
||||
changelog = "https://github.com/maltejur/discord-screenaudio/releases/tag/v${version}";
|
||||
# license = lib.licenses.gpl3Only;
|
||||
# maintainers = with lib.maintainers; [ huantian ];
|
||||
# platforms = lib.platforms.linux;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue