more stuff

This commit is contained in:
dusk 2020-12-23 19:54:51 +03:00
parent 28d1d1540b
commit ed926635df
Signed by: dusk
GPG Key ID: 1D8F8FAF2294D6EA
11 changed files with 576 additions and 331 deletions

85
flake.lock Normal file
View File

@ -0,0 +1,85 @@
{
"nodes": {
"home": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1608681543,
"narHash": "sha256-6YNP8GBG0nhqLMQVkCBxRirTYaaGhI8gKCwgcJ5+sLc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "3627ec4de58d7fbda13c82dfec94eace10198f23",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"flake": false,
"locked": {
"lastModified": 1607963610,
"narHash": "sha256-GbThFdlYfh9ujQjXX6Ngn88s2ALd1aepKsbxj0lgm28=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "2cda5cd30bc7c56240a1a91ec8d44c6d5222ee17",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"mynex": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1607689647,
"narHash": "sha256-pUpUCcp8usppbByFveRrV2NNS5sFrlvMndZt7xYOQL4=",
"owner": "yusdacra",
"repo": "nix-exprs",
"rev": "e9c16b956180d23c3cb8ec3e2843b2be662d43ef",
"type": "gitlab"
},
"original": {
"owner": "yusdacra",
"repo": "nix-exprs",
"type": "gitlab"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1608700021,
"narHash": "sha256-timIYNV0uwrbjg5L3zloUbPeFpBXnEtosbUaWdqR72U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2ae527c50e049570dd25132f9325527aa2320e32",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable-small",
"type": "indirect"
}
},
"root": {
"inputs": {
"home": "home",
"impermanence": "impermanence",
"mynex": "mynex",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View File

@ -15,30 +15,33 @@ let
nixosPersistence = "${impermanence}/nixos.nix"; nixosPersistence = "${impermanence}/nixos.nix";
}; };
modules = let modules =
inherit (home.nixosModules) home-manager; let
inherit (mynex.nixosModules) security networking; inherit (home.nixosModules) home-manager;
inherit (mynex.nixosModules) security networking;
core = ../profiles/core.nix; core = ../profiles/core.nix;
global = { global = {
networking.hostName = hostName; networking.hostName = hostName;
nix.nixPath = [ nix.nixPath = [
"nixpkgs=${nixpkgs}" "nixpkgs=${nixpkgs}"
"nixos-config=/etc/nixos/configuration.nix" "nixos-config=/etc/nixos/configuration.nix"
"nixpkgs-overlays=/etc/nixos/overlays" "nixpkgs-overlays=/etc/nixos/overlays"
]; ];
nixpkgs = { inherit pkgs; }; nixpkgs = { inherit pkgs; };
nixpkgs.overlays = [ mynex.overlay ]; nixpkgs.overlays = [ mynex.overlay ];
}; };
local = import "${toString ./.}/${hostName}.nix"; local = import "${toString ./.}/${hostName}.nix";
in [ core global local home-manager security networking ]; in
[ core global local home-manager security networking ];
}; };
hosts = recImport { hosts = recImport {
dir = ./.; dir = ./.;
_import = config; _import = config;
}; };
in hosts in
hosts

View File

@ -30,11 +30,13 @@ let
sudo umount /mnt sudo umount /mnt
''; '';
in { in
{
imports = [ imports = [
../users/patriot ../users/patriot
../users/root ../users/root
../profiles/network ../profiles/network
# ../profiles/network/nginx.nix
../profiles/develop ../profiles/develop
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
nixosPersistence nixosPersistence
@ -148,7 +150,7 @@ in {
}; };
environment = { environment = {
systemPackages = [ btrfsDiff ]; systemPackages = [ btrfsDiff pkgs.docker-compose ];
pathsToLink = [ "/share/zsh" ]; pathsToLink = [ "/share/zsh" ];
persistence."/persist" = { persistence."/persist" = {
directories = [ "/etc/nixos" ]; directories = [ "/etc/nixos" ];
@ -161,6 +163,23 @@ in {
# enable = true; # enable = true;
# videoDrivers = [ "amdgpu" ]; # videoDrivers = [ "amdgpu" ];
# }; # };
virtualisation.docker.enable = true;
services.postgresql = {
enable = true;
enableTCPIP = true;
authentication = pkgs.lib.mkOverride 10 ''
local all all trust
host all all 0.0.0.0/0 md5
'';
settings = {
listen_addresses = "*";
};
initialScript = pkgs.writeText "backend-initScript" ''
CREATE ROLE harmony WITH LOGIN PASSWORD 'harmony' CREATEDB;
CREATE DATABASE harmony;
GRANT ALL PRIVILEGES ON DATABASE harmony TO harmony;
'';
};
system.stateVersion = "20.09"; system.stateVersion = "20.09";
} }

View File

@ -3,7 +3,8 @@ let
inherit (builtins) attrNames isAttrs isInt readDir toJSON; inherit (builtins) attrNames isAttrs isInt readDir toJSON;
inherit (lib) filterAttrs hasSuffix mapAttrs' nameValuePair removeSuffix; inherit (lib) filterAttrs hasSuffix mapAttrs' nameValuePair removeSuffix;
in rec { in
rec {
# mapFilterAttrs :: # mapFilterAttrs ::
# (name -> value -> bool ) # (name -> value -> bool )
# (name -> value -> { name = any; value = any; }) # (name -> value -> { name = any; value = any; })
@ -11,14 +12,16 @@ in rec {
mapFilterAttrs = seive: f: attrs: filterAttrs seive (mapAttrs' f attrs); mapFilterAttrs = seive: f: attrs: filterAttrs seive (mapAttrs' f attrs);
recImport = { dir, _import ? base: import "${dir}/${base}.nix" }: recImport = { dir, _import ? base: import "${dir}/${base}.nix" }:
mapFilterAttrs (_: v: v != null) (n: v: mapFilterAttrs (_: v: v != null)
if n != "default.nix" && hasSuffix ".nix" n && v == "regular" (n: v:
if n != "default.nix" && hasSuffix ".nix" n && v == "regular"
then then
let name = removeSuffix ".nix" n; in nameValuePair (name) (_import name) let name = removeSuffix ".nix" n; in nameValuePair (name) (_import name)
else else
nameValuePair ("") (null)) (readDir dir); nameValuePair ("") (null))
(readDir dir);
pkgBin = name: "${pkgs."${name}"}/bin/${name}"; pkgBin = name: "${pkgs."${name}"}/bin/${name}";
} }

View File

@ -1,3 +1,9 @@
final: prev: { final: prev: {
hikari = prev.hikari.overrideAttrs (old: rec { version = "2.2.2"; }); hikari = prev.hikari.overrideAttrs (old: rec {
src = prev.fetchzip {
url = "https://hub.darcs.net/raichoo/hikari/dist/hikari.zip";
sha256 = "sha256-wguyND2LDyWtIoFibuxfFf9fi2D/0v7/fnGXy3JGjgM=";
};
buildInputs = old.buildInputs ++ [ prev.pandoc ];
});
} }

View File

@ -3,7 +3,8 @@ let
inherit (util) pkgBin; inherit (util) pkgBin;
inherit (lib) fileContents mkIf; inherit (lib) fileContents mkIf;
in { in
{
imports = [ ../local/locale.nix ]; imports = [ ../local/locale.nix ];
boot = { boot = {
@ -13,67 +14,72 @@ in {
console.font = "7x14"; console.font = "7x14";
environment = let environment =
coreBin = v: "${pkgs.coreutils}/bin/${v}"; let
nixBin = "${config.nix.package}/bin/nix"; coreBin = v: "${pkgs.coreutils}/bin/${v}";
in { nixBin = "${config.nix.package}/bin/nix";
systemPackages = with pkgs; [ in
bat {
exa systemPackages = with pkgs; [
ripgrep bat
curl exa
git ripgrep
gotop curl
gptfdisk git
iputils gotop
lm_sensors gptfdisk
mkpasswd iputils
]; lm_sensors
mkpasswd
ntfs3g
];
shellAliases = let ifSudo = string: mkIf config.security.sudo.enable string; shellAliases =
in { let ifSudo = string: mkIf config.security.sudo.enable string;
g = pkgBin "git"; in
{
g = pkgBin "git";
grep = "${pkgs.ripgrep}/bin/rg"; grep = "${pkgs.ripgrep}/bin/rg";
cat = "${pkgBin "bat"} -pp --theme=base16"; cat = "${pkgBin "bat"} -pp --theme=base16";
c = "${pkgBin "bat"} -pp --theme=base16"; c = "${pkgBin "bat"} -pp --theme=base16";
df = "${coreBin "df"} -h"; df = "${coreBin "df"} -h";
free = "${pkgs.procps}/bin/free -h"; free = "${pkgs.procps}/bin/free -h";
ls = pkgBin "exa"; ls = pkgBin "exa";
l = "${pkgBin "exa"} -lhg --git"; l = "${pkgBin "exa"} -lhg --git";
la = "${pkgBin "exa"} -lhg --git -a"; la = "${pkgBin "exa"} -lhg --git -a";
t = "${pkgBin "exa"} -lhg --git -T"; t = "${pkgBin "exa"} -lhg --git -T";
ta = "${pkgBin "exa"} -lhg --git -a -T"; ta = "${pkgBin "exa"} -lhg --git -a -T";
n = nixBin; n = nixBin;
nf = "${nixBin} flake"; nf = "${nixBin} flake";
nfc = "${nixBin} flake check"; nfc = "${nixBin} flake check";
nfu = "${nixBin} flake update"; nfu = "${nixBin} flake update";
nfua = "${nixBin} flake update --recreate-lock-file"; nfua = "${nixBin} flake update --recreate-lock-file";
nfs = "${nixBin} flake show"; nfs = "${nixBin} flake show";
np = "${nixBin} profile"; np = "${nixBin} profile";
npl = "${nixBin} profile info"; npl = "${nixBin} profile info";
npi = "${nixBin} profile install"; npi = "${nixBin} profile install";
npr = "${nixBin} profile remove"; npr = "${nixBin} profile remove";
nsh = "${nixBin} shell"; nsh = "${nixBin} shell";
ndev = "${nixBin} develop"; ndev = "${nixBin} develop";
nosce = "cd /etc/nixos"; nosce = "cd /etc/nixos";
nosr = ifSudo "sudo nixos-rebuild --fast"; nosr = ifSudo "sudo nixos-rebuild --fast";
nosrs = ifSudo "sudo nixos-rebuild switch"; nosrs = ifSudo "sudo nixos-rebuild switch";
nosrb = ifSudo "sudo nixos-rebuild boot"; nosrb = ifSudo "sudo nixos-rebuild boot";
nosrt = ifSudo "sudo nixos-rebuild test"; nosrt = ifSudo "sudo nixos-rebuild test";
ncg = ifSudo "sudo nix-collect-garbage"; ncg = ifSudo "sudo nix-collect-garbage";
ncgdo = ifSudo "sudo nix-collect-garbage --delete-old"; ncgdo = ifSudo "sudo nix-collect-garbage --delete-old";
top = pkgBin "gotop"; top = pkgBin "gotop";
myip = myip =
"${pkgs.dnsutils}/bin/dig +short myip.opendns.com @208.67.222.222 2>&1"; "${pkgs.dnsutils}/bin/dig +short myip.opendns.com @208.67.222.222 2>&1";
};
}; };
};
nix = { nix = {
package = pkgs.nixFlakes; package = pkgs.nixFlakes;

View File

@ -1,6 +1,6 @@
{ pkgs, ... }: { { pkgs, ... }: {
imports = [ ./kakoune.nix ]; imports = [ ./kakoune.nix ];
environment.systemPackages = with pkgs; [ nixfmt ]; environment.systemPackages = with pkgs; [ nixpkgs-fmt ];
environment.shellAliases = { nixf-all = "nixfmt **/**.nix"; }; environment.shellAliases = { nixf-all = "nixpkgs-fmt **/**.nix"; };
} }

View File

@ -1,16 +1,18 @@
{ {
services.stubby = { services.stubby = {
roundRobinUpstreams = false; roundRobinUpstreams = false;
upstreamServers = let nextDnsId = "75e43d"; upstreamServers =
in '' let nextDnsId = "75e43d";
- address_data: 45.90.28.0 in
tls_auth_name: "${nextDnsId}.dns1.nextdns.io" ''
- address_data: 2a07:a8c0::0 - address_data: 45.90.28.0
tls_auth_name: "${nextDnsId}.dns1.nextdns.io" tls_auth_name: "${nextDnsId}.dns1.nextdns.io"
- address_data: 45.90.30.0 - address_data: 2a07:a8c0::0
tls_auth_name: "${nextDnsId}.dns2.nextdns.io" tls_auth_name: "${nextDnsId}.dns1.nextdns.io"
- address_data: 2a07:a8c1::0 - address_data: 45.90.30.0
tls_auth_name: "${nextDnsId}.dns2.nextdns.io" tls_auth_name: "${nextDnsId}.dns2.nextdns.io"
''; - address_data: 2a07:a8c1::0
tls_auth_name: "${nextDnsId}.dns2.nextdns.io"
'';
}; };
} }

View File

@ -0,0 +1,35 @@
{ ... }: {
# services.nginx = {
# enable = true;
# enableReload = true;
# statusPage = true;
# recommendedGzipSettings = true;
# recommendedOptimisation = true;
# recommendedProxySettings = true;
# recommendedTlsSettings = true;
# virtualHosts."yusdacras-host.ydns.eu" = {
# # addSSL = true;
# # enableACME = true;
# listen = [
# { addr = "0.0.0.0"; port = 8080; }
# { addr = "[::]"; port = 8080; }
# # { addr = "0.0.0.0"; port = 8081; ssl = true; }
# ];
# locations = {
# "/matrix" = { proxyPass = "http://localhost:8000"; };
# "/page" = {
# root = "/var/www/yusdacras-host";
# };
# };
# };
# };
# security.acme = {
# acceptTerms = true;
# certs = {
# "yusdacras-host.ydns.eu".email = "y.bera003.06@protonmail.com";
# };
# };
networking.firewall.allowedTCPPorts = [ 8000 8448 ];
}

View File

@ -16,13 +16,13 @@ let
kideSrc = pkgs.fetchgit { kideSrc = pkgs.fetchgit {
url = "https://gitlab.com/yusdacra/kide.git"; url = "https://gitlab.com/yusdacra/kide.git";
rev = "c4116d433add520d8e18382e0bfee9c49bf67fd0"; rev = "40cb21c7e553fcc0fed99ed93dabbc1ffca0dbd0";
sha256 = "sha256-RTYl0rFR7Tv5UisQXL4Wucrlw3NZeTKIqrXTdx095y0="; sha256 = "sha256-MLHyQWFs7/I12dzXGKJAIlyO3tw3y4otVeVjeXxrqY4=";
fetchSubmodules = true; fetchSubmodules = true;
}; };
kideFiles = kideFiles =
mapAttrs' (n: _: nameValuePair "kak/${n}" { source = "${kideSrc}/${n}"; }) mapAttrs' (n: _: nameValuePair "kak/${n}" { source = "${kideSrc}/${n}"; })
(readDir kideSrc); (readDir kideSrc);
kideDeps = with pkgs; [ kideDeps = with pkgs; [
fzf fzf
bat bat
@ -46,6 +46,7 @@ let
}; };
normal = { normal = {
black = "ece3cc"; black = "ece3cc";
gray = "5b5b5b";
red = "d2212d"; red = "d2212d";
green = "489100"; green = "489100";
yellow = "ad8900"; yellow = "ad8900";
@ -56,6 +57,7 @@ let
}; };
bright = { bright = {
black = "d5cdb6"; black = "d5cdb6";
gray = "7b7b7b";
red = "cc1729"; red = "cc1729";
green = "428b00"; green = "428b00";
yellow = "a78300"; yellow = "a78300";
@ -66,19 +68,20 @@ let
}; };
}; };
colorSchemeDark = { colorSchemeDark = rec {
primary = { primary = {
normal = { normal = {
background = "181818"; background = "181818";
foreground = "b9b9b9"; foreground = "b9b9b9";
}; };
bright = { bright = {
background = "3b3b3b"; background = bright.black;
foreground = "dedede"; foreground = bright.white;
}; };
}; };
normal = { normal = {
black = "252525"; black = "252525";
gray = "5b5b5b";
red = "ed4a46"; red = "ed4a46";
green = "70b433"; green = "70b433";
yellow = "dbb32d"; yellow = "dbb32d";
@ -89,6 +92,7 @@ let
}; };
bright = { bright = {
black = "3b3b3b"; black = "3b3b3b";
gray = "7b7b7b";
red = "ff5e56"; red = "ff5e56";
green = "83c746"; green = "83c746";
yellow = "efc541"; yellow = "efc541";
@ -100,7 +104,8 @@ let
}; };
colorScheme = colorScheme =
if builtins.pathExists ./light then colorSchemeLight else colorSchemeDark; # if builtins.pathExists ./light then colorSchemeLight else colorSchemeDark;
colorSchemeDark;
bgColor = colorScheme.primary.normal.background; bgColor = colorScheme.primary.normal.background;
fgColor = colorScheme.primary.bright.foreground; fgColor = colorScheme.primary.bright.foreground;
@ -145,21 +150,45 @@ let
indicator = "#111111"; # don't care indicator = "#111111"; # don't care
}; };
fonts = [ fontComb ]; fonts = [ fontComb ];
in { in
{
home-manager.users.patriot = { config, pkgs, ... }: { home-manager.users.patriot = { config, pkgs, ... }: {
imports = [ ../profiles/hikari.nix ]; imports = [ ../profiles/hikari.nix ];
gtk = {
# enable = true;
font = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans 12";
};
iconTheme = {
package = pkgs.papirus-icon-theme;
name = "Papirus Dark";
};
theme = {
package = pkgs.numix-gtk-theme;
name = "Numix Dark";
};
};
qt = {
# enable = true;
platformTheme = "gtk";
};
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
home = { home = {
homeDirectory = nixosConfig.users.users.patriot.home; homeDirectory = nixosConfig.users.users.patriot.home;
packages = with pkgs; packages = with pkgs;
[ [
darcs # Font stuff
discord
fontPackage fontPackage
noto-fonts-cjk noto-fonts-cjk
noto-fonts-emoji-blob-bin
font-awesome font-awesome
nerdfonts (nerdfonts.override { fonts = [ "Iosevka" ]; })
# Programs
appimage-run
bitwarden bitwarden
pfetch pfetch
neofetch neofetch
@ -169,15 +198,17 @@ in {
youtube-dl youtube-dl
ffmpeg ffmpeg
mupdf mupdf
transmission-gtk
gitAndTools.gh
steam-run steam-run
lutris lutris
xdg_utils xdg_utils
# xdg-user-dirs # xdg-user-dirs
tagref
# gnome3.zenity # gnome3.zenity
# x11 docker stuff # x11 docker stuff
# x11docker # x11docker
# weston # weston
xwayland
# xpra # xpra
# xdotool # xdotool
# xorg.setxkbmap # xorg.setxkbmap
@ -202,9 +233,12 @@ in {
# use this if they aren't displayed properly: # use this if they aren't displayed properly:
export _JAVA_AWT_WM_NONREPARENTING=1 export _JAVA_AWT_WM_NONREPARENTING=1
''; '';
wrapperFeatures.gtk = true;
config = { config = {
inherit fonts; inherit fonts;
bars = [ ]; # no bars = [{
command = "${pkgBin "waybar"}";
}];
colors = { colors = {
background = "#${bgColor}"; background = "#${bgColor}";
focused = addIndSway focusedWorkspace; focused = addIndSway focusedWorkspace;
@ -216,43 +250,47 @@ in {
menu = "${pkgBin "rofi"} -show drun | ${pkgs.sway}/bin/swaymsg --"; menu = "${pkgBin "rofi"} -show drun | ${pkgs.sway}/bin/swaymsg --";
modifier = "Mod4"; modifier = "Mod4";
terminal = pkgBin "alacritty"; terminal = pkgBin "alacritty";
keybindings = let keybindings =
mod = config.wayland.windowManager.sway.config.modifier; let
cat = pkgs.coreutils + "/bin/cat"; mod = config.wayland.windowManager.sway.config.modifier;
grim = pkgBin "grim"; cat = pkgs.coreutils + "/bin/cat";
slurp = pkgBin "slurp"; grim = pkgBin "grim";
pactl = pkgs.pulseaudio + "/bin/pactl"; slurp = pkgBin "slurp";
playerctl = pkgBin "playerctl"; pactl = pkgs.pulseaudio + "/bin/pactl";
wf-recorder = pkgBin "wf-recorder"; playerctl = pkgBin "playerctl";
wl-copy = pkgs.wl-clipboard + "/bin/wl-copy"; wf-recorder = pkgBin "wf-recorder";
wl-paste = pkgs.wl-clipboard + "/bin/wl-paste"; wl-copy = pkgs.wl-clipboard + "/bin/wl-copy";
shotFile = config.home.homeDirectory wl-paste = pkgs.wl-clipboard + "/bin/wl-paste";
+ "/shots/shot_$(date '+%Y_%m_%d_%H_%M')"; shotFile = config.home.homeDirectory
in lib.mkOptionDefault { + "/shots/shot_$(date '+%Y_%m_%d_%H_%M')";
"${mod}+q" = "kill"; in
# Screenshot and copy it to clipboard lib.mkOptionDefault {
"Mod1+s" = '' "${mod}+q" = "kill";
exec export SFILE="${shotFile}.png" && ${grim} "$SFILE" && ${cat} "$SFILE" | ${wl-copy} -t image/png "${mod}+Shift+e" = "exit";
''; "${mod}+Shift+r" = "reload";
# Save selected area as a picture and copy it to clipboard # Screenshot and copy it to clipboard
"Mod1+Shift+s" = '' "Mod1+s" = ''
exec export SFILE="${shotFile}.png" && ${grim} -g "$(${slurp})" "$SFILE" && ${cat} "$SFILE" | ${wl-copy} -t image/png exec export SFILE="${shotFile}.png" && ${grim} "$SFILE" && ${cat} "$SFILE" | ${wl-copy} -t image/png
''; '';
# Record screen # Save selected area as a picture and copy it to clipboard
"Mod1+r" = ''exec ${wf-recorder} -f "${shotFile}.mp4"''; "Mod1+Shift+s" = ''
# Record an area exec export SFILE="${shotFile}.png" && ${grim} -g "$(${slurp})" "$SFILE" && ${cat} "$SFILE" | ${wl-copy} -t image/png
"Mod1+Shift+r" = '';
''exec ${wf-recorder} -g "$(${slurp})" -f "${shotFile}.mp4"''; # Record screen
# Stop recording "Mod1+r" = ''exec ${wf-recorder} -f "${shotFile}.mp4"'';
"Mod1+c" = "exec pkill -INT wf-recorder"; # Record an area
"XF86AudioRaiseVolume" = "exec ${pactl} set-sink-volume 0 +5%"; "Mod1+Shift+r" =
"XF86AudioLowerVolume" = "exec ${pactl} set-sink-volume 0 -5%"; ''exec ${wf-recorder} -g "$(${slurp})" -f "${shotFile}.mp4"'';
"XF86AudioMute" = "exec ${pactl} set-sink-mute 0 toggle"; # Stop recording
"XF86AudioPlay" = "exec ${playerctl} play-pause"; "Mod1+c" = "exec pkill -INT wf-recorder";
"XF86AudioPrev" = "exec ${playerctl} previous"; "XF86AudioRaiseVolume" = "exec ${pactl} set-sink-volume 0 +5%";
"XF86AudioNext" = "exec ${playerctl} next"; "XF86AudioLowerVolume" = "exec ${pactl} set-sink-volume 0 -5%";
"XF86AudioStop" = "exec ${playerctl} stop"; "XF86AudioMute" = "exec ${pactl} set-sink-mute 0 toggle";
}; "XF86AudioPlay" = "exec ${playerctl} play-pause";
"XF86AudioPrev" = "exec ${playerctl} previous";
"XF86AudioNext" = "exec ${playerctl} next";
"XF86AudioStop" = "exec ${playerctl} stop";
};
input = { input = {
"*" = { "*" = {
xkb_layout = nixosConfig.services.xserver.layout; xkb_layout = nixosConfig.services.xserver.layout;
@ -293,28 +331,43 @@ in {
set -g status off set -g status off
''; '';
}; };
qutebrowser = { chromium = {
enable = true; enable = true;
# package = pkgs.ungoogled-chromium;
extensions = [
"gcbommkclmclpchllfjekcdonpmejbdp" # https everywhere
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # ublock
"nngceckbapebfimnlniiiahkandclblb" # bitwarden
"ldpochfccmkkmhdbclfhpagapcfdljkj" # decentraleyes
"annfbnbieaamhaimclajlajpijgkdblo" # dark theme
"eimadpbcbfnmbkopoojfekhnkhdbieeh" # dark reader
"hlepfoohegkhhmjieoechaddaejaokhf" # github refined
];
};
qutebrowser = {
# enable = true;
settings = { settings = {
content.javascript.enabled = false; content.javascript.enabled = false;
colors.webpage.darkmode.enabled = true; colors.webpage.darkmode.enabled = true;
tabs = { show = "multiple"; }; tabs = { show = "multiple"; };
}; };
extraConfig = let extraConfig =
domains = [ let
"github.com" domains = [
"gitlab.com" "github.com"
"nixos.org" "gitlab.com"
"protonmail.com" "nixos.org"
"bitwarden.com" "protonmail.com"
"duckduckgo.com" "bitwarden.com"
"youtube.com" "duckduckgo.com"
"docker.com" "youtube.com"
]; "docker.com"
enableJsForDomain = d: '' ];
config.set('content.javascript.enabled', True, 'https://*.${d}') enableJsForDomain = d: ''
''; config.set('content.javascript.enabled', True, 'https://*.${d}')
in lib.concatStrings (map enableJsForDomain domains); '';
in
lib.concatStrings (map enableJsForDomain domains);
}; };
git = { git = {
enable = true; enable = true;
@ -354,14 +407,15 @@ in {
compression = true; compression = true;
hashKnownHosts = true; hashKnownHosts = true;
userKnownHostsFile = "~/.local/share/ssh/known-hosts"; userKnownHostsFile = "~/.local/share/ssh/known-hosts";
extraConfig = '' # Only needed for darcs
Host hub.darcs.net # extraConfig = ''
ControlMaster no # Host hub.darcs.net
ForwardAgent no # ControlMaster no
ForwardX11 no # ForwardAgent no
Ciphers +aes256-cbc # ForwardX11 no
MACs +hmac-sha1 # Ciphers +aes256-cbc
''; # MACs +hmac-sha1
# '';
}; };
zsh = { zsh = {
enable = true; enable = true;
@ -369,21 +423,23 @@ in {
enableVteIntegration = true; enableVteIntegration = true;
enableAutosuggestions = true; enableAutosuggestions = true;
enableCompletion = true; enableCompletion = true;
plugins = let plugins =
fast-syntax-highlighting = { let
name = "fast-syntax-highlighting"; fast-syntax-highlighting = rec {
src = "${pkgs.zsh-fast-syntax-highlighting}"; name = "fast-syntax-highlighting";
}; src = pkgs."zsh-${name}".out;
per-directory-history = {
name = "per-directory-history";
src = pkgs.fetchFromGitHub {
owner = "jimhester";
repo = "per-directory-history";
rev = "d2e291dd6434e340d9be0e15e1f5b94f32771c06";
hash = "sha256-VHRgrVCqzILqOes8VXGjSgLek38BFs9eijmp0JHtD5Q=";
}; };
}; per-directory-history = {
in [ fast-syntax-highlighting per-directory-history ]; name = "per-directory-history";
src = pkgs.fetchFromGitHub {
owner = "jimhester";
repo = "per-directory-history";
rev = "d2e291dd6434e340d9be0e15e1f5b94f32771c06";
hash = "sha256-VHRgrVCqzILqOes8VXGjSgLek38BFs9eijmp0JHtD5Q=";
};
};
in
[ fast-syntax-highlighting per-directory-history ];
# xdg compliant # xdg compliant
dotDir = ".config/zsh"; dotDir = ".config/zsh";
history.path = ".local/share/zsh/history"; history.path = ".local/share/zsh/history";
@ -396,11 +452,15 @@ in {
# use this if they aren't displayed properly: # use this if they aren't displayed properly:
export _JAVA_AWT_WM_NONREPARENTING=1 export _JAVA_AWT_WM_NONREPARENTING=1
''; '';
loginExtra = '' loginExtra =
if [ "$(${pkgs.coreutils}/bin/tty)" = "/dev/tty1" ]; then let
exec ${pkgBin "hikari"} deCmd = if config.wayland.windowManager.sway.enable then "sway" else (if config.wayland.windowManager.hikari.enable then "hikari" else throw "Need a window manager to start!");
fi in
''; ''
if [ "$(${pkgs.coreutils}/bin/tty)" = "/dev/tty1" ]; then
exec ${pkgBin deCmd}
fi
'';
initExtra = '' initExtra = ''
bindkey "$terminfo[kRIT5]" forward-word bindkey "$terminfo[kRIT5]" forward-word
bindkey "$terminfo[kLFT5]" backward-word bindkey "$terminfo[kLFT5]" backward-word
@ -428,180 +488,196 @@ in {
enableNixDirenvIntegration = true; enableNixDirenvIntegration = true;
}; };
fzf.enable = true; fzf.enable = true;
rofi = let rofi =
bgc = "#${bgColor}"; let
fgc = "#${fgColor}"; bgc = "#${bgColor}";
acc = "#${acColor}"; fgc = "#${fgColor}";
in { acc = "#${acColor}";
enable = true; in
colors = { {
window = { enable = true;
background = bgc; colors = {
border = bgc; window = {
separator = bgc;
};
rows = {
normal = {
background = bgc; background = bgc;
foreground = fgc; border = bgc;
backgroundAlt = bgc; separator = bgc;
highlight = { };
rows = {
normal = {
background = bgc; background = bgc;
foreground = acc; foreground = fgc;
backgroundAlt = bgc;
highlight = {
background = bgc;
foreground = acc;
};
}; };
}; };
}; };
font = fontComb;
separator = "none";
terminal = pkgBin "alacritty";
}; };
font = fontComb; waybar =
separator = "none"; let
terminal = pkgBin "alacritty"; swayEnabled = config.wayland.windowManager.sway.enable;
}; in
waybar = { {
enable = true; enable = true;
settings = [{ settings = [{
layer = "top"; layer = "top";
position = "top"; position = "top";
modules-left = [ ]; modules-left = if swayEnabled then [ "sway/workspaces" ] else [ ];
modules-center = [ ]; modules-center = if swayEnabled then [ "sway/window" ] else [ ];
modules-right = modules-right =
[ "pulseaudio" "cpu" "memory" "temperature" "clock" "tray" ]; [ "pulseaudio" "cpu" "memory" "temperature" "clock" "tray" ];
modules = { modules = {
"tray" = { spacing = 8; }; "tray" = { spacing = 8; };
"cpu" = { format = "/cpu {usage}/"; }; "cpu" = { format = "/cpu {usage}/"; };
"memory" = { format = "/mem {}/"; }; "memory" = { format = "/mem {}/"; };
"temperature" = { "temperature" = {
hwmon-path = "/sys/class/hwmon/hwmon1/temp2_input"; hwmon-path = "/sys/class/hwmon/hwmon1/temp2_input";
format = "/tmp {temperatureC}C/"; format = "/tmp {temperatureC}C/";
};
"pulseaudio" = {
format = "/vol {volume}/ {format_source}";
format-bluetooth = "/volb {volume}/ {format_source}";
format-bluetooth-muted = "/volb/ {format_source}";
format-muted = "/vol/ {format_source}";
format-source = "/mic {volume}/";
format-source-muted = "/mic/";
};
}; };
"pulseaudio" = { }];
format = "/vol {volume}/ {format_source}"; style =
format-bluetooth = "/volb {volume}/ {format_source}"; let
format-bluetooth-muted = "/volb/ {format_source}"; makeBorder = color: "border-bottom: 3px solid #${color};";
format-muted = "/vol/ {format_source}"; makeInfo = color: ''
format-source = "/mic {volume}/"; color: #${color};
format-source-muted = "/mic/"; ${makeBorder color}
}; '';
};
}];
style = ''
* {
border: none;
border-radius: 0;
/* `otf-font-awesome` is required to be installed for icons */
font-family: ${font};
font-size: 13px;
min-height: 0;
}
window#waybar { clockColor = colorScheme.bright.magenta;
background-color: #222222; cpuColor = colorScheme.bright.green;
border-bottom: 0px solid rgba(100, 114, 125, 0.5); memColor = colorScheme.bright.blue;
color: #ffffff; pulseColor = {
transition-property: background-color; normal = colorScheme.bright.cyan;
transition-duration: .5s; muted = colorScheme.bright.gray;
} };
tmpColor = {
normal = colorScheme.bright.yellow;
critical = colorScheme.bright.red;
};
in
''
* {
border: none;
border-radius: 0;
/* `otf-font-awesome` is required to be installed for icons */
font-family: ${font};
font-size: 13px;
min-height: 0;
}
#workspaces button { window#waybar {
padding: 0 5px; background-color: #${bgColor};
background-color: transparent; /* border-bottom: 0px solid rgba(100, 114, 125, 0.5); */
color: #ffffff; color: #${fgColor};
border-bottom: 3px solid transparent; transition-property: background-color;
} transition-duration: .5s;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ #workspaces button {
#workspaces button:hover { padding: 0 5px;
background: rgba(0, 0, 0, 0.2); background-color: transparent;
box-shadow: inherit; color: #${fgColor};
border-bottom: 3px solid #ffffff; border-bottom: 3px solid transparent;
} }
#workspaces button.focused { /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
background-color: #64727D; #workspaces button:hover {
border-bottom: 3px solid #ffffff; background: rgba(0, 0, 0, 0.2);
} box-shadow: inherit;
border-bottom: 3px solid #ffffff;
}
#workspaces button.urgent { #workspaces button.focused {
background-color: #eb4d4b; border-bottom: 3px solid #${acColor};
} }
#mode { #workspaces button.urgent {
background-color: #64727D; background-color: #${acColor};
border-bottom: 3px solid #ffffff; color: #${bgColor};
} }
#clock, #mode {
#battery, background-color: #64727D;
#cpu, border-bottom: 3px solid #ffffff;
#memory, }
#temperature,
#backlight,
#network,
#pulseaudio,
#custom-media,
#tray,
#mode,
#idle_inhibitor,
#mpd {
padding: 0 10px;
margin: 0 4px;
color: #ffffff;
}
#clock { #clock,
background-color: #64727D; #battery,
color: #000000; #cpu,
} #memory,
#temperature,
#backlight,
#network,
#pulseaudio,
#custom-media,
#tray,
#mode,
#idle_inhibitor,
#mpd {
padding: 0 10px;
margin: 0 4px;
background-color: transparent;
${makeInfo fgColor}
}
label:focus { label:focus {
background-color: #000000; color: #000000;
} }
#cpu { #clock {
background-color: #2ecc71; ${makeInfo clockColor}
color: #000000; }
}
#memory { #cpu {
background-color: #9b59b6; ${makeInfo cpuColor}
color: #000000; }
}
#pulseaudio { #memory {
background-color: #f1c40f; ${makeInfo memColor}
color: #000000; }
}
#pulseaudio.muted { #pulseaudio {
background-color: #90b1b1; ${makeInfo pulseColor.normal}
color: #2a5c45; }
}
#temperature { #pulseaudio.muted {
background-color: #f0932b; ${makeInfo pulseColor.muted}
color: #000000; }
}
#temperature.critical { #temperature {
background-color: #eb4d4b; ${makeInfo tmpColor.normal}
color: #000000; }
}
#tray { #temperature.critical {
background-color: #2980b9; ${makeInfo tmpColor.critical}
} }
''; '';
}; };
}; };
services = { services = {
gpg-agent = { gpg-agent = rec {
enable = true; enable = true;
enableSshSupport = true; enableSshSupport = true;
sshKeys = [ "8369D9CA26C3EAAAB8302A88CEE6FD14B58AA965" ]; sshKeys = [ "8369D9CA26C3EAAAB8302A88CEE6FD14B58AA965" ];
defaultCacheTtl = 3600 * 6; defaultCacheTtl = 3600 * 6;
defaultCacheTtlSsh = 3600 * 6; defaultCacheTtlSsh = defaultCacheTtl;
maxCacheTtl = 3600 * 24; maxCacheTtl = 3600 * 24;
maxCacheTtlSsh = 3600 * 24; maxCacheTtlSsh = maxCacheTtl;
grabKeyboardAndMouse = false; grabKeyboardAndMouse = false;
pinentryFlavor = "gtk2"; pinentryFlavor = "gtk2";
}; };

View File

@ -1,9 +1,14 @@
{ lib, config, pkgs, ... }: { lib, config, pkgs, ... }:
with lib; with lib;
let cfg = config.wayland.windowManager.hikari; let cfg = config.wayland.windowManager.hikari;
in { in
{
options.wayland.windowManager.hikari = { options.wayland.windowManager.hikari = {
enable = mkEnableOption "hikari window manager"; enable = mkEnableOption "hikari window manager";
xwayland = mkOption {
type = types.bool;
default = true;
};
font = mkOption { font = mkOption {
type = types.str; type = types.str;
default = "Iosevka"; default = "Iosevka";
@ -11,7 +16,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ hikari ]; home.packages = with pkgs; [ hikari ] ++ (optional cfg.xwayland xwayland);
xdg = { xdg = {
enable = true; enable = true;
@ -50,6 +55,11 @@ in {
} }
} }
} }
pointers {
"*" {
accel-profile = "flat"
}
}
} }
layouts { layouts {