migrate from github

This commit is contained in:
aethrvmn 2024-07-23 21:12:34 +02:00
commit bdbce5f678
41 changed files with 2182 additions and 0 deletions

33
Orzhov/openbox-3/themerc Normal file
View file

@ -0,0 +1,33 @@
# Glory to the Orzhov Guild
## Global
border.width: 1
padding.width: 1
menu.overlap: -6
## Window
border.width: 2
window.active.border.color: #AC966D
window.inactive.border.color: #bebcae
## Menu
menu.border.width: 1
menu.title.bg: flat
menu.title.bg.color: #4A5152
menu.title.text.color: #BEBCAE80
menu.title.text.justify: left
menu.items.bg: flat
menu.items.bg.color: #F7F6F3
menu.items.text.color: #4A5152
menu.items.active.bg: flat
menu.items.active.bg.color: #4A5152
menu.items.active.text.color: #F7F6F3

18
README.md Normal file
View file

@ -0,0 +1,18 @@
# dotfiles
![](desktop.png)
I use NixOS so in the nixos file you will find the 'modular' (I wish) config I daily drive, and in the .config you will find whatever isn't declarable in NixOS 23.11.
Included are also the wallpapers I use. I ~~stole~~ found them online on different websites
## Components
- OS: NixOS
- Wayland Compositor: Labwc
- Launcher: bemenu
- Bar: Waybar
- Notifications: Mako
- Terminal Emulator: Alacritty
- Display Configuration: Kanshi
- Text Editor: Helix
- Shell: Zsh with Powerlevel10k prompt

159
configuration.nix Normal file
View file

@ -0,0 +1,159 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
# Custom modules
./system/boot.nix
./system/hardware.nix
./system/network.nix
./system/programs.nix
./system/services.nix
./system/systemd.nix
./system/labwc.nix
./system/xfce.nix
];
security = {
polkit.enable = true;
rtkit.enable = true;
};
# Set your time zone.
time.timeZone = "Europe/Rome";
# Select internationalisation properties.
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = "el_GR.UTF-8";
LC_IDENTIFICATION = "el_GR.UTF-8";
LC_MEASUREMENT = "el_GR.UTF-8";
LC_MONETARY = "el_GR.UTF-8";
LC_NAME = "el_GR.UTF-8";
LC_NUMERIC = "el_GR.UTF-8";
LC_PAPER = "el_GR.UTF-8";
LC_TELEPHONE = "el_GR.UTF-8";
LC_TIME = "el_GR.UTF-8";
};
};
users = {
defaultUserShell = pkgs.zsh;
# Define a user account. Don't forget to set a password with passwd.
users.aethrvmn = {
isNormalUser = true;
description = "Vasilis";
password = "gang";
extraGroups = [ "networkmanager" "wheel" ];
};
};
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.aethrvmn = import ./vasilis.nix;
};
# Flakes setup
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Garbage collection
nix.gc = {
automatic = true;
options = "--delete-older-than 7d";
dates = "weekly";
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
alacritty
alsa-utils
# bash
bat
brightnessctl
cava
# devenv
# dotnetCorePackages.sdk_9_0
# eza
gcc
glib
glibc
# greetd.tuigreet
# gobject-introspection
# helix
# hugo
# jitsi
# localsend
nim
nimble
# obs-studio
# pavucontrol
playerctl
poetry
python311Full
python311Packages.stdenv
# python311Packages.tkinter
# python311Packages.pygobject3
# qbittorrent
# stdenv.cc.cc.lib
# slurp
# spotify
# thunderbird
# tk
udisks
linuxPackages.v4l2loopback
usbutils
v4l-utils
ventoy
wget
wineWowPackages.waylandFull
xarchiver
zlib
];
# Fonts
fonts.packages = with pkgs; [
corefonts
dejavu_fonts
font-awesome
liberation_ttf
meslo-lgs-nf
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
vistafonts
];
# Env settings
environment.sessionVariables = {
DOTNET_ROOT = "${pkgs.dotnet-sdk}";
NIXOS_OZONE_WL = "1";
};
qt = {
enable = true;
platformTheme = "gnome";
style = "adwaita-dark";
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
}

BIN
desktop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

48
flake.lock Normal file
View file

@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1721534365,
"narHash": "sha256-XpZOkaSJKdOsz1wU6JfO59Rx2fqtcarQ0y6ndIOKNpI=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "635563f245309ef5320f80c7ebcb89b2398d2949",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1721379653,
"narHash": "sha256-8MUgifkJ7lkZs3u99UDZMB4kbOxvMEXQZ31FO3SopZ0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1d9c2c9b3e71b9ee663d11c5d298727dace8d374",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

28
flake.nix Normal file
View file

@ -0,0 +1,28 @@
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, home-manager, ... } @ inputs:
# let
# pkgs = nixpkgs.legacyPackages.x86_64-linux;
# in
{
nixosConfigurations.valanixos = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.aethrvmn = import ./vasilis.nix;
}
];
};
};
}

View file

@ -0,0 +1,39 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/4f28915c-4f09-40d8-9c83-cd141be42049";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/ABDA-E71D";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/dbb604f4-ece2-404e-8aa8-936124e1aa08"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,57 @@
{ config, ... }:
{
programs.alacritty = {
enable = true;
settings = {
window = {
padding.x = 10;
padding.y = 10;
# decorations = "None";
# opacity = 0.95; #Until blur is an option
blur = true;
dimensions.columns = 80;
dimensions.lines = 24;
};
font = {
size = 12;
normal.family = "MesloLGS NF";
};
cursor.style = "Underline";
colors = {
primary = {
background = "#2D2A2E";
foreground = "#fff1f3";
};
normal = {
black = "#2c2525";
red = "#fd6883";
green = "#adda78";
yellow = "#f9cc6c";
blue = "#f38d70";
magenta = "#a8a9eb";
cyan = "#85dacc";
white = "#fff1f3";
};
bright = {
black = "#72696a";
red = "#fd6883";
green = "#adda78";
yellow = "#f9cc6c";
blue = "#f38d70";
magenta = "#a8a9eb";
cyan = "#85dacc";
white = "#fff1f3";
};
};
};
};
}

9
home-manager/dots.nix Normal file
View file

@ -0,0 +1,9 @@
{ config, ... }:
{
# Raw config files for the programs that Nix doesn't support yet
home.file.".config/labwc".source = ../labwc;
# This is a custom theme I'm working on for my system
home.file.".themes/Orzhov".source = ../Orzhov;
}

10
home-manager/git.nix Normal file
View file

@ -0,0 +1,10 @@
{ config, pkgs, ... }:
{
programs.git = {
enable = true;
# userName = "Vasilis Valatsos";
# userEmail = "vasilvalat@gmail.com";
};
}

29
home-manager/gtk.nix Normal file
View file

@ -0,0 +1,29 @@
{ config, pkgs, ... }:
{
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
};
gtk = {
enable = true;
# theme = {
# name = "adwaita-dark";
# package = pkgs.gnome.gnome-themes-extra;
# };
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
};
}

151
home-manager/helix.nix Normal file
View file

@ -0,0 +1,151 @@
{ config, pkgs, ... }:
{
programs.helix = {
enable = true;
defaultEditor = true;
settings = {
theme = "monokai_transparent";
editor = {
line-number = "relative";
bufferline = "always";
text-width = 200;
statusline = {
left = ["mode" "spinner" "separator"];
center = ["file-name" "read-only-indicator" "file-modification-indicator" "total-line-numbers"];
right = ["separator" "diagnostics" "selections" "register" "position" "file-encoding"];
};
file-picker.hidden = true;
indent-guides.render = true;
soft-wrap = {
enable = true;
max-wrap = 25;
max-indent-retain = 20;
wrap-at-text-width = true;
};
};
keys.normal = {
up = "no_op";
down = "no_op";
left = "no_op";
right = "no_op";
home = "no_op";
end = "no_op";
};
keys.insert= {
up = "no_op";
down = "no_op";
left = "no_op";
right = "no_op";
home = "no_op";
end = "no_op";
};
};
themes = {
"monokai_transparent" = {
"inherits" = "monokai_pro";
"ui.background" = { };
};
};
languages = with pkgs; {
language-server = {
typescript-language-server = {
command = "${nodePackages.typescript-language-server}/bin/typescript-language-server";
config.documentFormatting = false;
};
nil = {
command = "${nil}/bin/nil";
config.nil = {
formatting.command = [ "${nixpkgs-fmt}/bin/nixpkgs-fmt" ];
nix.flake.autoEvalInputs = true;
};
};
pylsp.command = "${python3Packages.python-lsp-server}/bin/pylsp";
ltex-ls.command = "${ltex-ls}/bin/ltex-ls";
r.command = "${R}/bin/R";
nimlangserver.command = "${nimlangserver}/bin/nimlangserver";
};
language =
let
jsTsWebLanguageServers = [
"typescript-language-server"
];
in [
{
name = "typescript";
language-servers = jsTsWebLanguageServers;
}
{
name = "javascript";
language-servers = jsTsWebLanguageServers;
}
{
name = "jsx";
language-servers = jsTsWebLanguageServers;
}
{
name = "tsx";
language-servers = jsTsWebLanguageServers;
}
{
name = "sql";
formatter.command = "pg_format";
}
{
name = "json";
language-servers = [
{
name = "vscode-json-language-server";
except-features = [ "format" ];
}
"efm-lsp-prettier"
];
}
{
name = "markdown";
language-servers = [
{
name = "marksman";
except-features = [ "format" ];
}
"ltex-ls"
"efm-lsp-prettier"
];
}
{
name = "xml";
file-types = [ "xml" ];
formatter = {
command = "${pkgs.yq-go}/bin/yq";
args = [ "--input-format" "xml" "--output-format" "xml" "--indent" "2" ];
};
}
];
};
};
}

55
home-manager/kanshi.nix Normal file
View file

@ -0,0 +1,55 @@
{ config, ... }:
{
services.kanshi = {
enable = true;
systemdTarget="";
settings = [
{
profile.name = "home_office";
profile.outputs = [
{
criteria = "DP-1";
position = "1080,550";
mode = "1920x1080@120Hz";
adaptiveSync = true;
}
{
criteria = "DP-2";
position = "0,0";
mode = "1920x1080@120Hz";
transform = "90";
adaptiveSync = true;
}
{
criteria = "HDMI-A-1";
position = "3000,550";
mode = "1920x1080@60Hz";
}
];
}
{
profile.name = "laptop";
profile.outputs = [
{
criteria = "eDP-1";
mode = "1920x1080";
transform = "normal";
}
];
}
# {
# profile.name = "tablet";
# profile.outputs = [
# {
# criteria = "eDP-1";
# mode = "1920x1080";
# transform = "180";
# }
# ];
# }
];
};
}

20
home-manager/mako.nix Normal file
View file

@ -0,0 +1,20 @@
{ config, ... }:
{
services.mako = {
enable = true;
layer = "top";
output = "DP-1, eDP-1";
backgroundColor = "#4A5152";
borderSize = 2;
borderColor = "#BEBCAE";
defaultTimeout = 5000;
ignoreTimeout = true;
};
}

126
home-manager/ohmyposh.nix Normal file
View file

@ -0,0 +1,126 @@
{ config, ... } :
{
programs.oh-my-posh = {
enable = true;
enableZshIntegration = true;
settings = {
"console_title_template" = "{{ .Shell }} in {{ .Folder }}";
"final_space" = true;
"version" = 2;
"blocks" = [
{
"alignment" = "left";
"newline" = true;
"type" = "prompt";
"segments" = [
{
"template" = "{{ .Icon }} ";
"type" = "os";
}
{
"background" = "transparent";
"foreground" = "#bebcae";
"style" = "plain";
"template" = " {{ .Path }}";
"type" = "path";
"properties" = {
"style" = "full";
};
}
{
"background" = "transparent";
"foreground" = "white";
"style" = "plain";
"template" = " {{ if .UpstreamURL }}{{ url .UpstreamIcon .UpstreamURL }}{{ end }}{{ .HEAD }}{{ if .Working.Changed }} {{ .Working.String }}{{ end }}{{ if .Staging.Changed }} {{ .Staging.String }}{{ end }} ";
"type" = "git";
"properties" = {
"branch_max_length" = 25;
"fetch_status" = true;
"fetch_upstream_icon" = true;
};
}
];
}
{
"overflow" = "hidden";
"type" = "rprompt";
"segments" = [
{
"duration" = 0;
"namelength" = 0;
"text" = "";
"background" = "transparent";
"foreground" = "white";
"style" = "plain";
"template" = " ";
"type" = "node";
"properties" = {
"display_mode" = "files";
"fetch_package_manager" = false;
"home_enabled" = false;
};
}
{
"duration" = 0;
"namelength" = 0;
"text" = "";
"background" = "transparent";
"foreground" = "white";
"style" = "plain";
"template" = " ";
"type" = "go";
"properties" = {
"fetch_version" = false;
};
}
{
"background" = "transparent";
"foreground" = "white";
"style" = "plain";
"template" = " {{ .Venv }}";
"type" = "python";
"properties" = {
"display_mode" = "files";
"fetch_version" = false;
"fetch_virtual_env" = true;
};
}
{
"background" = "transparent";
"foreground" = "red";
"style" = "plain";
"template" = "{{ if .Error }} {{ end }}";
"type" = "status";
}
{
"background" = "transparent";
"foreground" = "#ac966d";
"style" = "plain";
"type" = "executiontime";
}
];
}
{
"alignment" = "left";
"newline" = true;
"type" = "prompt";
"segments" = [
{
"background" = "transparent";
"foreground" = "#ac966d";
"style" = "plain";
"template" = "";
"type" = "text";
}
];
}
];
"transient_prompt" = {
"background" = "transparent";
"foreground" = "white";
"template" = " ";
};
};
};
}

227
home-manager/waybar.nix Normal file
View file

@ -0,0 +1,227 @@
{config, pkgs, ...}:
{
programs.waybar = {
enable = true;
settings = {
mainBar = {
# General settings
reload_style_on_change = true;
output = [
"HDMI-A-1"
"DP-1"
"eDP-1"
];
layer = "bottom";
position = "top";
spacing = 0;
margin = "5";
# Modules definition
modules-left = [
"custom/media"
# "cava"
"pulseaudio"
];
modules-center = [
"clock"
"custom/weather"
];
modules-right = [
"network"
"bluetooth"
"battery"
"tray"
];
# Modules Configuration
"battery" = {
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-icons = [ "" "" "" "" "" ];
};
"bluetooth" = {
format = "On ";
format-off = "Off ";
format-connected = "{device_alias} ";
on-click = "alacritty -e bluetoothctl";
on-click-right = "sh ~/.dotfiles/scripts/toggle_bluetooth";
};
"cava" = {
# cava_config = "$HOME/.config/cava/cava.conf";
framerate = 30;
autosens = 1;
sensitivity = 100;
bars = 14;
lower_cutoff_freq = 50;
higher_cutoff_freq = 10000;
method = "pulse";
source = "auto";
stereo = true;
reverse = false;
bar_delimiter = 0;
monstercat = false;
waves = false;
noise_reduction = 0.77;
input_delay = 2;
format-icons = ["" "" "" "" "" "" "" "" ];
actions = {
on-click-right = "mode";
};
};
"clock" = {
format = "{:%R %b %d}";
timezone = "Europe/Athens";
tooltip-format = "<tt>{calendar}</tt>";
calendar = {
mode = "year";
mode-mon-col = 3;
format = {
months = "<span color='#ffead3'><b>{}</b></span>";
days = "<span color='#ecc6d9'><b>{}</b></span>";
weeks = "<span color='#99ffdd'><b>{}</b></span>";
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
};
};
on-click = "thunderbird";
};
"network" = {
format-wifi = "{essid} ";
format-disconnected = "Disconnected ";
format-disabled = "Off ";
on-click = "alacritty -e nmtui";
on-click-right = "~/.dotfiles/scripts/toggle_wifi";
};
"pulseaudio" = {
format = "{volume}% {icon}";
format-bluetooth = "{volume}% {icon} ";
format-muted = "";
format-icons = ["奔" ""];
scroll-step = 1;
on-click = "amixer sset Master toggle";
on-click-right = "pavucontrol";
};
"tray" = {
icon-size = 18;
spacing = 10;
show-passive-items = true;
};
# Custom Modules
"custom/media" = {
return-type = "json";
exec = "waybar-mpris --autofocus --order 'SYMBOL:ARTIST:TITLE'";
on-click = "waybar-mpris --send toggle";
escape = true;
};
"custom/weather" = {
exec = "sh $HOME/.dotfiles/scripts/wittr.sh";
return-type = "json";
format = "{}";
spacing = 10;
tooltip = true;
interval = 900;
};
};
};
style =
''
# General settings
* {
font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
font-size: 14px;
}
window#waybar {
background: rgba(190, 188, 174,0.5);
color: #e9f3f0;
border-radius: 10px;
}
#battery,
#bluetooth,
#cava,
#clock,
#pulseaudio,
#tray,
#network,
#custom-media,
#custom-weather {
background-color: #4A5152;
padding-top: 1px;
padding-bottom: 1px;
}
#battery {
border-radius: 10px 0px 0px 10px;
margin-right: 1px;
padding-right: 5px;
padding-left: 10px;
}
#clock {
border-radius: 10px 0px 0px 10px;
margin-right:1px;
padding-left: 10px;
padding-right: 5px;
}
#bluetooth,
#network {
border-radius: 10px;
margin-right: 10px;
padding-left: 10px;
padding-right: 10px;
}
#pulseaudio {
border-radius: 0px 10px 10px 0px;
min-width: 10px;
margin-left: 1px;
padding-right: 10px;
padding-left: 10px;
}
#tray {
border-radius: 0px 10px 10px 0px;
min-width: 10px;
padding-right: 10px;
padding-left: 10px;
}
#custom-media{
border-radius: 10px 0px 0px 10px;
padding-left: 10px;
padding-right: 5px;
}
#custom-weather {
border-radius: 0px 10px 10px 0px;
padding-right: 10px;
padding-left: 5px;
}
'';
};
}

48
home-manager/zsh.nix Normal file
View file

@ -0,0 +1,48 @@
{ config, pkgs, lib, ... }:
{
programs.zsh = {
enable = true;
autocd = true;
autosuggestion.enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
# dirHashes = {
# docs = "~/Documents"
# ...
# }
shellAliases = {
# Nix specific
nix-update = "sudo nixos-rebuild switch --flake ~/.dotfiles#valanixos";
nix-config = "hx ~/.dotfiles";
# Aliases for color options
ls = "eza --icons=always --color=always";
ll = "eza -a --color=always --long -tree --icons=always --no-time --no-user";
cat = "bat";
grep = "grep --color=auto";
egrep = "egrep --color=auto";
fgrep = "fgrep --color=auto";
# Misc
# .. = "cd ..";
mv = "mv -i";
cp = "cp -i";
rm = "rm -i";
};
initExtra = ''
eval "$(oh-my-posh init zsh --config /home/aethrvmn/.config/ohmyposh/config.json)"
eval "$(atuin init zsh)"
eval "$(ssh-agent -s)"
clear
'';
};
}

32
labwc/autostart Normal file
View file

@ -0,0 +1,32 @@
# Configure output directives such as mode, position, scale and transform using kanshi.
kanshi >/dev/null 2>&1 &
# Use xrandr for x-wayland
xrandr --output DP-1 --primary &
# Set background image.
swww-daemon &
# Launch a panel such as yambar or waybar.
waybar >/dev/null 2>&1 &
# Enable notifications. Typically GNOME/KDE application notifications go
# through the org.freedesktop.Notifications D-Bus API and require a client such
# as mako to function correctly. Thunderbird is an example of this.
mako >/dev/null 2>&1 &
# Start the Thunar daemon for better startup
thunar --daemon &
## Set dark theme
sh ~/.themes/orzhovtheme.sh &
# Deploy swww wallpapers
swww img -o HDMI-A-1 ~/.dotfiles/wallpapers/hobbits.jpg &
swww img -o DP-1 ~/.dotfiles/wallpapers/statues.jpg &
swww img -o DP-2 ~/.dotfiles/wallpapers/bluemana.png &
swww img -o eDP-1 ~/.dotfiles/wallpapers/tree.jpg &
# Custom software
spotify &

36
labwc/environment Executable file
View file

@ -0,0 +1,36 @@
## Uncomment lines starting with one '#' to suit your needs.
## Use the XKB_DEFAULT_LAYOUT variable to set the keyboard layout. For example
## to start with Swedish keyboard layout set it to 'se'. If you are unsure what
## your country code is, refer to the layout section of:
## /usr/share/X11/xkb/rules/evdev.lst
##
## Multiple keyboard layouts can be set by comma-separating the country codes.
## If multiple layouts are used, specify the toggle-keybind using
## XKB_DEFAULT_OPTIONS as show below.
##
## For further details, see xkeyboard-config(7)
XKB_DEFAULT_LAYOUT=us,gr
XKB_DEFAULT_OPTIONS=grp:alt_shift_toggle
## Force firefox to use wayland backend.
MOZ_ENABLE_WAYLAND=1
## Set cursor theme and size. Find system icons themes with:
## `find /usr/share/icons/ -type d -name "cursors"`
XCURSOR_THEME=breeze_cursors
XCURSOR_SIZE=24
## BEMENU stuff
BEMENU_OPTS= -n -i --tb "#2D2A2E" --tf "#AC9C6D" --fb "#2D2A2E" --nb "#2D2A2E" --ab "#2D2A2E" --hb "#2D2A2E" --hf "#AC9C6D" --line-height 30 "$@" --center --wrap --ignorecase --prompt '>' --list 12 --no-overlap --width-factor 0.5 --fn 'MesloLGS NF'
BEMENU_BACKEND=wayland
XCURSOR_THEME=Breeze
XCURSOR_SIZE=24

106
labwc/menu.xml Executable file
View file

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu>
<menu label="root-menu" id="root-menu">
<item label="Firefox" icon="firefox">
<action name="Execute"><command>firefox --name firefox</command></action>
</item>
<item label="Telegram Desktop" icon="telegram">
<action name="Execute"><command>telegram-desktop --</command></action>
</item>
<item label="Thunderbird" icon="thunderbird">
<action name="Execute"><command>thunderbird --name thunderbird</command></action>
</item>
<item label="File Manager" icon="org.xfce.thunar">
<action name="Execute"><command>thunar</command></action>
</item>
<separator/>
<menu id="Miscellaneous" label="Miscellaneous">
<item label="LocalSend" icon="localsend">
<action name="Execute"><command>/nix/store/dhyhij4g2mzrs4bkmhx12gzj9d0lgv6l-localsend-1.15.0/bin/localsend_app</command></action>
</item>
<item label="Czkawka" icon="com.github.qarmin.czkawka">
<action name="Execute"><command>czkawka_gui</command></action>
</item>
</menu> <!-- Accessories -->
<separator/>
<menu id="Development" label="Development">
<item label="btop++" icon="btop">
<action name="Execute"><command>alacritty -e btop</command></action>
</item>
<item label="Helix" icon="helix">
<action name="Execute"><command>alacritty -e helix</command></action>
</item>
<item label="Godot 4" icon="godot">
<action name="Execute"><command>/nix/store/a8w8z8xidwirlshcyxxldmxx1lskcqp7-godot4-4.2.2-stable/bin/godot4</command></action>
</item>
</menu>
<separator/>
<menu id="Games" label="Games">
<item label="Lutris" icon="lutris">
<action name="Execute"><command>lutris</command></action>
</item>
<item label="Steam" icon="steam">
<action name="Execute"><command>steam</command></action>
</item>
</menu> <!-- Games -->
<separator/>
<!-- <item label="Tablet Mode"> -->
<!-- <action name="Execute"><command>kanshictl switch tablet</command></action> -->
<!-- </item> -->
<!-- <item label="Laptop Mode"> -->
<!-- <action name="Execute"><command>kanshictl switch laptop</command></action> -->
<!-- </item> -->
<!-- <separator/> -->
<menu id="System" label="System">
<item label="Screenshot" icon="org.xfce.screenshooter">
<action name="Execute"><command>sh -c &#39;grim -g &#34;$(slurp)&#34; - | swappy -f -&#39;</command></action>
</item>
<item label="Network Configuration" icon="preferences-system-network">
<action name="Execute"><command>nm-connection-editor</command></action>
</item>
<item label="File Manager Settings" icon="org.xfce.thunar">
<action name="Execute"><command>thunar-settings</command></action>
</item>
<item label="labwc-tweaks" icon="labwc_tweaks">
<action name="Execute"><command>labwc-tweaks</command></action>
</item>
<item label="PulseAudio Volume Control" icon="multimedia-volume-control">
<action name="Execute"><command>pavucontrol</command></action>
</item>
<item label="Removable Drives and Media" icon="org.xfce.volman">
<action name="Execute"><command>thunar-volman-settings</command></action>
</item>
</menu> <!-- System -->
<menu label="System Settings" id="System Settings">
<item label="Reconfigure">
<action name="Reconfigure"></action>
</item>
<item label="Logout">
<action name="Exit"></action>
</item>
<item label="Reboot">
<action name="Execute" command="systemctl reboot"></action>
</item>
<item label="Shutdown">
<action name="Execute" command="systemctl poweroff"></action>
</item>
</menu>
</menu> <!-- root-menu -->
<menu label="sys-menu" id="sys-menu">
<item label="Reconfigure">
<action name="Reconfigure"></action>
</item>
<item label="Logout">
<action name="Exit"></action>
</item>
<item label="Reboot">
<action name="Execute" command="systemctl reboot"></action>
</item>
<item label="Shutdown">
<action name="Execute" command="systemctl poweroff"></action>
</item>
</menu>
</openbox_menu>

402
labwc/rc.xml Executable file
View file

@ -0,0 +1,402 @@
<?xml version="1.0"?>
<!--
This file contains all supported config elements & attributes with
default values.
-->
<labwc_config>
<core>
<decoration>server</decoration>
<gap>0</gap>
<adaptiveSync>no</adaptiveSync>
<reuseOutputMode>no</reuseOutputMode>
</core><!-- <font><theme> can be defined without an attribute to set all places -->
<theme>
<name>Orzhov</name>
<cornerRadius>0</cornerRadius>
<keepBorder>yes</keepBorder>
<font>
<name>MesloLGS NF</name>
<size>10</size>
<slant>normal</slant>
<weight>normal</weight>
</font>
</theme><!--
Just as for window-rules, 'identifier' relates to app_id for native Wayland
windows and WM_CLASS for XWayland clients.
-->
<windowSwitcher show="yes" preview="yes" outlines="yes">
<fields>
<field content="type" width="25%"></field>
<field content="identifier" width="25%"></field>
<field content="title" width="50%"></field>
</fields>
</windowSwitcher><!-- edge strength is in pixels -->
<resistance>
<screenEdgeStrength>20</screenEdgeStrength>
</resistance><!-- Show a simple resize and move indicator -->
<resize popupShow="Never"></resize>
<focus>
<followMouse>yes</followMouse>
<followMouseRequiresMovement>yes</followMouseRequiresMovement>
<raiseOnFocus>no</raiseOnFocus>
</focus><!-- Set range to 0 to disable window snapping completely -->
<snapping>
<range>1</range>
<topMaximize>yes</topMaximize>
</snapping><!-- Workspaces can be configured like this: -->
<desktops>
<popupTime>1000</popupTime>
<names>
<name>Workspace 1</name>
<name>Workspace 2</name>
<name>Workspace 3</name>
<name>Workspace 4</name>
</names>
</desktops>
<regions>
<region name="top-left" x="0%" y="0%" height="50%" width="50%"></region>
<region name="top" x="0%" y="0%" height="50%" width="100%"></region>
<region name="top-right" x="50%" y="0%" height="50%" width="50%"></region>
<region name="left" x="0%" y="0%" height="100%" width="50%"></region>
<region name="center" x="10%" y="10%" height="80%" width="80%"></region>
<region name="right" x="50%" y="0%" height="100%" width="50%"></region>
<region name="bottom-left" x="0%" y="50%" height="50%" width="50%"></region>
<region name="bottom" x="0%" y="50%" height="50%" width="100%"></region>
<region name="bottom-right" x="50%" y="50%" height="50%" width="50%"></region>
</regions><!--
Keybind actions are specified in labwc-actions(5)
The following keybind modifiers are supported:
W - window/super/logo
A - alt
C - ctrl
S - shift
Use <keyboard><default /> to load all the default keybinds (those listed
below). If the default keybinds are largely what you want, a sensible
approach could be to start the <keyboard> section with a <default />
element, and then (re-)define any special binds you need such as launching
your favourite terminal or application launcher. See rc.xml for an example.
-->
<keyboard>
<numlock>on</numlock>
<repeatRate>25</repeatRate>
<repeatDelay>600</repeatDelay>
<keybind key="W-r">
<action name="Reconfigure"></action>
</keybind>
<keybind key="Print">
<action name="Execute">
<command>sh -c &#39;grim -g &#34;$(slurp)&#34; - | swappy -f -&#39;</command>
</action>
</keybind>
<keybind key="A-Tab">
<action name="NextWindow"></action>
</keybind>
<keybind key="W-Return">
<action name="Execute" command="alacritty"></action>
</keybind>
<keybind key="W-w">
<action name="Execute" command="firefox"></action>
</keybind>
<keybind key="W-S-w">
<action name="Execute" command="firefox --private-window"></action>
</keybind>
<keybind key="W-space">
<action name="Execute" command="j4-dmenu-desktop --dmenu=bemenu"></action>
</keybind>
<keybind key="W-s">
<action name="Execute" command="spotify"></action>
</keybind>
<keybind key="W-f">
<action name="Execute" command="thunar"></action>
</keybind>
<keybind key="W-m">
<action name="Execute" command="thunderbird"></action>
</keybind>
<keybind key="W-c">
<action name="Close"></action>
</keybind>
<keybind key="W-1">
<action name="GoToDesktop" to="1"></action>
<action name="Execute" command="bash -c &#39;echo 1 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-2">
<action name="GoToDesktop" to="2"></action>
<action name="Execute" command="bash -c &#39;echo 2 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-3">
<action name="GoToDesktop" to="3"></action>
<action name="Execute" command="bash -c &#39;echo 3 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-4">
<action name="GoToDesktop" to="4"></action>
<action name="Execute" command="bash -c &#39;echo 4 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-1">
<action name="SendToDesktop" to="1"></action>
<action name="Execute" command="bash -c &#39;echo 1 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-2">
<action name="SendToDesktop" to="2"></action>
<action name="Execute" command="bash -c &#39;echo 2 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-3">
<action name="SendToDesktop" to="3"></action>
<action name="Execute" command="bash -c &#39;echo 3 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-4">
<action name="SendToDesktop" to="4"></action>
<action name="Execute" command="bash -c &#39;echo 4 &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-Left">
<action name="GoToDesktop" to="left"></action>
<action name="Execute" command="bash -c &#39;echo left &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-S-Right">
<action name="GoToDesktop" to="right"></action>
<action name="Execute" command="bash -c &#39;echo right &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-C-S-Right">
<action name="SendToDesktop" to="right"></action>
<action name="Execute" command="bash -c &#39;echo right &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-C-S-Left">
<action name="SendToDesktop" to="left"></action>
<action name="Execute" command="bash -c &#39;echo left &gt; /tmp/workspace&#39;"></action>
</keybind>
<keybind key="W-Left">
<action name="SnapToEdge" direction="left"></action>
<action name="Focus"></action>
<action name="Raise"></action>
</keybind>
<keybind key="W-Right">
<action name="SnapToEdge" direction="right"></action>
<action name="Focus"></action>
<action name="Raise"></action>
</keybind>
<keybind key="W-Up">
<action name="ToggleMaximize"></action>
<action name="Focus"></action>
<action name="Raise"></action>
</keybind>
<keybind key="W-Down">
<action name="SnapToRegion" region="center"></action>
<action name="Focus"></action>
<action name="Raise"></action>
</keybind>
<keybind key="W-A-C-Right">
<action name="SnapToRegion" region="top-right"></action>
</keybind>
<keybind key="W-A-Right">
<action name="SnapToRegion" region="bottom-right"></action>
</keybind>
<keybind key="W-A-C-Left">
<action name="SnapToRegion" region="top-left"></action>
</keybind>
<keybind key="W-A-Left">
<action name="SnapToRegion" region="bottom-left"></action>
</keybind>
<keybind key="A-Space">
<action name="ShowMenu" menu="client-menu"></action>
</keybind>
<keybind key="XF86_AudioLowerVolume">
<action name="Execute" command="amixer sset Master 5%-"></action>
</keybind>
<keybind key="XF86_AudioRaiseVolume">
<action name="Execute" command="amixer sset Master 5%+"></action>
</keybind>
<keybind key="XF86_AudioMute">
<action name="Execute" command="amixer sset Master toggle"></action>
</keybind>
<keybind key="XF86_MonBrightnessUp">
<action name="Execute" command="brightnessctl set +10%"></action>
</keybind>
<keybind key="XF86_MonBrightnessDown">
<action name="Execute" command="brightnessctl set 10%-"></action>
</keybind><!--
<keybind key="W-KP_7"><action name="SnapToRegion" region="top-left" /></keybind>
<keybind key="W-KP_8"><action name="SnapToRegion" region="top" /></keybind>
<keybind key="W-KP_9"><action name="SnapToRegion" region="top-right" /></keybind>
<keybind key="W-KP_4"><action name="SnapToRegion" region="left" /></keybind>
<keybind key="W-KP_5"><action name="SnapToRegion" region="center" /></keybind>
<keybind key="W-KP_6"><action name="SnapToRegion" region="right" /></keybind>
<keybind key="W-KP_1"><action name="SnapToRegion" region="bottom-left" /></keybind>
<keybind key="W-KP_2"><action name="SnapToRegion" region="bottom" /></keybind>
<keybind key="W-KP_3"><action name="SnapToRegion" region="bottom-right" /></keybind>
-->
</keyboard><!--
Multiple <mousebind> can exist within one <context>
Multiple <actions> can exist within one <mousebind>
Currently, the only openbox-action not supported is "Unshade"
Use <mouse><default /> to load all the default mousebinds (those listed
below). If the default mousebinds are largely what you want, a sensible
approach could be to start the <mouse> section with a <default />
element, and then (re-)define any special binds you need such as launching
a custom menu when right-clicking on your desktop. See rc.xml for an example.
-->
<mouse><!-- time is in ms -->
<doubleClickTime>500</doubleClickTime>
<scrollFactor>1.0</scrollFactor>
<context name="Frame">
<mousebind button="W-Left" action="Press">
<action name="Focus"></action>
<action name="Raise"></action>
</mousebind>
<mousebind button="W-Left" action="Drag">
<action name="Move"></action>
</mousebind>
<mousebind button="W-Right" action="Press">
<action name="Focus"></action>
<action name="Raise"></action>
</mousebind>
<mousebind button="W-Right" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="Top">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="Left">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="Right">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="Bottom">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="TRCorner">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="BRCorner">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="TLCorner">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="BLCorner">
<mousebind button="Left" action="Drag">
<action name="Resize"></action>
</mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus"></action>
<action name="Raise"></action>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"></action>
<action name="Raise"></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"></action>
<action name="Raise"></action>
</mousebind>
</context>
<context name="Root">//
<mousebind button="Left" action="Press">
<action name="ShowMenu" menu="root-menu"></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu" menu="sys-menu"></action>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="ShowMenu" menu="root-menu"></action>
</mousebind>
<mousebind direction="Up" action="Scroll">
<action name="GoToDesktop" to="left" wrap="yes"></action>
<action name="Execute" command="bash -c &#39;echo left &gt; /tmp/workspace&#39;"></action>
</mousebind>
<mousebind direction="Down" action="Scroll">
<action name="GoToDesktop" to="right" wrap="yes"></action>
<action name="Execute" command="bash -c &#39;echo right &gt; /tmp/workspace&#39;"></action>
</mousebind>
</context>
</mouse><!--
The *category* element can be set to touch, non-touch, default or the name
of a device. You can obtain device names by running *libinput list-devices*
as root or member of the input group.
Tap is set to *yes* be default. All others are left blank in order to use
device defaults.
All values are [yes|no] except for:
- pointerSpeed [-1.0 to 1.0]
- accelProfile [flat|adaptive]
- tapButtonMap [lrm|lmr]
-->
<libinput>
<device category="">
<naturalScroll></naturalScroll>
<leftHanded></leftHanded>
<pointerSpeed></pointerSpeed>
<accelProfile></accelProfile>
<tap>yes</tap>
<tapButtonMap></tapButtonMap>
<tapAndDrag></tapAndDrag>
<dragLock></dragLock>
<middleEmulation></middleEmulation>
<disableWhileTyping></disableWhileTyping>
</device>
</libinput>
<!--
# Window Rules
# - Criteria can consist of 'identifier' or 'title' or both (in which case
# AND logic is used).
# - 'identifier' relates to app_id for native Wayland windows and WM_CLASS
# for XWayland clients.
# - Criteria can also contain `matchOnce="true"` meaning that the rule
# must only apply to the first instance of the window with that
# particular 'identifier' or 'title'.
# - Matching against patterns with '*' (wildcard) and '?' (joker) is
# supported. Pattern matching is case-insensitive.
<windowRules>
<windowRule identifier="*"><action name="Maximize"/></windowRule>
<windowRule identifier="foo" serverDecoration="yes"/>
<windowRule title="bar" serverDecoration="yes"/>
<windowRule identifier="baz" title="quax" serverDecoration="yes"/>
</windowRules>
# Example below for `lxqt-panel` and `pcmanfm-qt \-\-desktop`
# where 'matchOnce' is used to avoid applying rule to the panel configuration
# window with the same 'app_id'
<windowRules>
<windowRule identifier="lxqt-panel" matchOnce="true">
<skipTaskbar>yes</skipTaskbar>
<action name="MoveTo" x="0" y="0" />
<action name="ToggleAlwaysOnTop"/>
</windowRule>
<windowRule title="pcmanfm-desktop*">
<skipTaskbar>yes</skipTaskbar>
<skipWindowSwitcher>yes</skipWindowSwitcher>
<action name="MoveTo" x="0" y="0" />
<action name="ToggleAlwaysOnBottom"/>
</windowRule>
</windowRules>
<windowRules>
<windowRule identifier="*">
<action name="ToggleDecorations"></action>
</windowRule>
<windowRule identifier="*" serverDecoration="no">
<action name="ToggleDecorations"></action>
</windowRule> -For some reason Steam needs this-
</windowRules>
-->
</labwc_config>

194
scripts/mediaplayer.py Executable file
View file

@ -0,0 +1,194 @@
#!/usr/bin/env python3
import gi
gi.require_version("Playerctl", "2.0")
from gi.repository import Playerctl, GLib
from gi.repository.Playerctl import Player
import argparse
import logging
import sys
import signal
import gi
import json
import os
from typing import List
logger = logging.getLogger(__name__)
def signal_handler(sig, frame):
logger.info("Received signal to stop, exiting")
sys.stdout.write("\n")
sys.stdout.flush()
# loop.quit()
sys.exit(0)
class PlayerManager:
def __init__(self, selected_player=None, excluded_player=[]):
self.manager = Playerctl.PlayerManager()
self.loop = GLib.MainLoop()
self.manager.connect(
"name-appeared", lambda *args: self.on_player_appeared(*args))
self.manager.connect(
"player-vanished", lambda *args: self.on_player_vanished(*args))
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
self.selected_player = selected_player
self.excluded_player = excluded_player.split(',') if excluded_player else []
self.init_players()
def init_players(self):
for player in self.manager.props.player_names:
if player.name in self.excluded_player:
continue
if self.selected_player is not None and self.selected_player != player.name:
logger.debug(f"{player.name} is not the filtered player, skipping it")
continue
self.init_player(player)
def run(self):
logger.info("Starting main loop")
self.loop.run()
def init_player(self, player):
logger.info(f"Initialize new player: {player.name}")
player = Playerctl.Player.new_from_name(player)
player.connect("playback-status",
self.on_playback_status_changed, None)
player.connect("metadata", self.on_metadata_changed, None)
self.manager.manage_player(player)
self.on_metadata_changed(player, player.props.metadata)
def get_players(self) -> List[Player]:
return self.manager.props.players
def write_output(self, text, player):
logger.debug(f"Writing output: {text}")
output = {"text": text,
"class": "custom-" + player.props.player_name,
"alt": player.props.player_name}
sys.stdout.write(json.dumps(output) + "\n")
sys.stdout.flush()
def clear_output(self):
sys.stdout.write("\n")
sys.stdout.flush()
def on_playback_status_changed(self, player, status, _=None):
logger.debug(f"Playback status changed for player {player.props.player_name}: {status}")
self.on_metadata_changed(player, player.props.metadata)
def get_first_playing_player(self):
players = self.get_players()
logger.debug(f"Getting first playing player from {len(players)} players")
if len(players) > 0:
# if any are playing, show the first one that is playing
# reverse order, so that the most recently added ones are preferred
for player in players[::-1]:
if player.props.status == "Playing":
return player
# if none are playing, show the first one
return players[0]
else:
logger.debug("No players found")
return None
def show_most_important_player(self):
logger.debug("Showing most important player")
# show the currently playing player
# or else show the first paused player
# or else show nothing
current_player = self.get_first_playing_player()
if current_player is not None:
self.on_metadata_changed(current_player, current_player.props.metadata)
else:
self.clear_output()
def on_metadata_changed(self, player, metadata, _=None):
logger.debug(f"Metadata changed for player {player.props.player_name}")
player_name = player.props.player_name
artist = player.get_artist()
title = player.get_title()
track_info = ""
if player_name == "spotify" and "mpris:trackid" in metadata.keys() and ":ad:" in player.props.metadata["mpris:trackid"]:
track_info = "Advertisement"
elif artist is not None and title is not None:
track_info = f"{artist} - {title}"
else:
track_info = title
if track_info:
if player.props.status == "Playing":
track_info = "" + track_info
else:
track_info = "" + track_info
# only print output if no other player is playing
current_playing = self.get_first_playing_player()
if current_playing is None or current_playing.props.player_name == player.props.player_name:
self.write_output(track_info, player)
else:
logger.debug(f"Other player {current_playing.props.player_name} is playing, skipping")
def on_player_appeared(self, _, player):
logger.info(f"Player has appeared: {player.name}")
if player.name in self.excluded_player:
logger.debug(
"New player appeared, but it's in exclude player list, skipping")
return
if player is not None and (self.selected_player is None or player.name == self.selected_player):
self.init_player(player)
else:
logger.debug(
"New player appeared, but it's not the selected player, skipping")
def on_player_vanished(self, _, player):
logger.info(f"Player {player.props.player_name} has vanished")
self.show_most_important_player()
def parse_arguments():
parser = argparse.ArgumentParser()
# Increase verbosity with every occurrence of -v
parser.add_argument("-v", "--verbose", action="count", default=0)
parser.add_argument("-x", "--exclude", "- Comma-separated list of excluded player")
# Define for which player we"re listening
parser.add_argument("--player")
parser.add_argument("--enable-logging", action="store_true")
return parser.parse_args()
def main():
arguments = parse_arguments()
# Initialize logging
if arguments.enable_logging:
logfile = os.path.join(os.path.dirname(
os.path.realpath(__file__)), "media-player.log")
logging.basicConfig(filename=logfile, level=logging.DEBUG,
format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s")
# Logging is set by default to WARN and higher.
# With every occurrence of -v it's lowered by one
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
logger.info("Creating player manager")
if arguments.player:
logger.info(f"Filtering for player: {arguments.player}")
if arguments.exclude:
logger.info(f"Exclude player {arguments.exclude}")
player = PlayerManager(arguments.player, arguments.exclude)
player.run()
if __name__ == "__main__":
main()

11
scripts/toggle_bluetooth Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env bash
# Check the current Bluetooth power state
state=$(bluetoothctl show | grep "Powered:" | awk '{print $2}')
# Toggle Bluetooth power state
if [ "$state" == "yes" ]; then
bluetoothctl power off
else
bluetoothctl power on
fi

11
scripts/toggle_wifi Executable file
View file

@ -0,0 +1,11 @@
#!/usr/bin/env bash
# Check the current Wi-Fi state
state=$(nmcli radio wifi)
# Toggle Wi-Fi state
if [ "$state" == "enabled" ]; then
nmcli radio wifi off
else
nmcli radio wifi on
fi

14
scripts/wittr.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/sh
# Fetch weather data with the required format
req=$(curl -s wttr.in/?format="%t|%l|%c|%f|%h|%C")
# Extract the temperature and weather symbol for the bar
bar=$(echo $req | awk -F "|" '{print $1" "$3}')
# Extract the tooltip information, which includes location and detailed weather
tooltip=$(echo $req | awk -F "|" '{print $2" ("$3") "$4", "$6}')
# Output the JSON
echo "{\"text\":\"$bar\", \"tooltip\":\"$tooltip\"}"

46
scripts/workspaces Executable file
View file

@ -0,0 +1,46 @@
#!/usr/bin/env bash
# <config>
NUMBER=4
SYMBOL_CURRENT="  "
SYMBOL_OTHER="  "
PIPE=/tmp/workspace
WRAP=true
# </config>
# format_line takes the current workspace number [1..N] and prints a string
# representing the list of workspaces (e.g. 4 -> "0 0 0 1 0")
format_line() {
before=`yes $SYMBOL_OTHER 2>/dev/null | head -n $(($1 - 1))`
after=`yes $SYMBOL_OTHER 2>/dev/null | head -n $(($NUMBER - $1))`
echo $before $SYMBOL_CURRENT $after
}
# remove an existing pipe and make a new one
rm -f $PIPE
mkfifo $PIPE
# print initial state
current=1
format_line $current
while true
do
if read input <$PIPE; then
if [ $input == "right" ]; then input=$((current + 1)); fi
if [ $input == "left" ]; then input=$((current - 1)); fi
if (( $input < 1 )); then
if [ "$WRAP" == false ]; then continue; fi
input=$NUMBER
fi
if (( $input > $NUMBER )); then
if [ "$WRAP" == false ]; then continue; fi
input=1
fi
if (( $input == $current )); then continue; fi
format_line $input
current=$input
fi
done

23
system/boot.nix Normal file
View file

@ -0,0 +1,23 @@
{ config, pkgs, ...}:
{
boot={
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
initrd.kernelModules = [ "amdgpu" ];
kernelModules = [ "v4l2loopback" ];
extraModulePackages = [ pkgs.linuxPackages.v4l2loopback ];
extraModprobeConfig = ''
options v4l2loopback exclusive_caps=1 devices=1
'';
};
}

27
system/hardware.nix Normal file
View file

@ -0,0 +1,27 @@
{ config, pkgs, ... }:
{
hardware = {
bluetooth = {
enable = true;
powerOnBoot = false;
};
graphics = {
extraPackages = with pkgs; [
amdvlk
rocmPackages.clr.icd
];
extraPackages32 = with pkgs.pkgsi686Linux; [
libva
];
# setLdLibraryPath = true;
};
pulseaudio.enable = false;
};
}

34
system/labwc.nix Normal file
View file

@ -0,0 +1,34 @@
{ config, pkgs, ... }:
{
services = {
xserver.enable = true;
greetd = {
enable = true;
settings={
default_session={
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --user-menu -rti --asterisks --cmd labwc";
user = "greeter";
};
};
};
};
programs = {
labwc.enable = true;
};
systemd.services.greetd.serviceConfig = {
Type = "idle";
StandardInput = "tty";
StandardOutput = "tty";
StandardError = "journal"; # Without this errors will spam on screen
# Without these bootlogs will spam on screen
TTYReset = true;
TTYVHangup = true;
TTYVTDisallocate = true;
};
}

25
system/network.nix Normal file
View file

@ -0,0 +1,25 @@
{ config, pkgs, ... }:
{
networking = {
hostName = "valanixos"; # Define your hostname.
# Enables wireless support via wpa_supplicant.
# wireless.enable = true;
# Configure network proxy if necessary
# proxy.default = "http://user:password@proxy:port/";
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networkmanager.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
};
}

42
system/programs.nix Normal file
View file

@ -0,0 +1,42 @@
{ config, pkgs, ... }:
{
programs = {
firefox.enable = true;
file-roller.enable = true;
labwc.enable = true;
nix-ld = {
enable = true;
libraries = with pkgs; [
zlib
libgcc
];
};
steam.enable = true;
thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-media-tags-plugin
thunar-volman
];
};
zsh.enable = true;
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
};
}

28
system/services.nix Normal file
View file

@ -0,0 +1,28 @@
{ config, pkgs, ... }:
{
services = {
xserver = {
enable = true;
videoDrivers = ["amdgpu"];
xkb.layout = "us";
wacom.enable = true;
};
printing.enable = true;
gvfs.enable = true;
tumbler.enable = true;
pipewire = {
enable = true;
audio.enable = true;
pulse.enable = true;
jack.enable = true;
alsa.enable = true;
};
};
}

17
system/systemd.nix Normal file
View file

@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
systemd = {
user.services.kanshi = {
enable = true;
description = "kanshi daemon";
wantedBy = [];
after = [];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.kanshi}/bin/kanshi -c kanshi_config_file";
};
};
};
}

17
system/xfce.nix Normal file
View file

@ -0,0 +1,17 @@
{ config, pkgs, ... }:
{
services.xserver = {
enable=true;
desktopManager={
xterm.enable=false;
xfce.enable=true;
};
# displayManager={
# lightdm.enable=true;
# defaultSession="xfce";
# };
};
}

60
vasilis.nix Normal file
View file

@ -0,0 +1,60 @@
{config, pkgs, lib, ...}:
{
imports =
[
./home-manager/alacritty.nix
./home-manager/dots.nix
./home-manager/git.nix
./home-manager/gtk.nix
./home-manager/helix.nix
./home-manager/kanshi.nix
./home-manager/mako.nix
./home-manager/ohmyposh.nix
./home-manager/waybar.nix
./home-manager/zsh.nix
];
home.username = "aethrvmn";
home.homeDirectory = "/home/aethrvmn";
home.stateVersion = "23.11";
home.sessionVariables.GTK_THEME = "Adwaita-dark";
home.packages = with pkgs; [
_1password-gui
atuin
bemenu
btop
czkawka
cowsay
eza
fastfetch
filezilla
git
godot_4
grim
hugo
imv
jitsi
j4-dmenu-desktop
kanshi
labwc-tweaks
localsend
lutris
mpd
mpv
obs-studio
pavucontrol
qbittorrent
slurp
spotify
swappy
swww
telegram-desktop
thunderbird
waybar-mpris
wlr-randr
xfce.mousepad
xfce.xfce4-settings
];
}

BIN
wallpapers/bluemana.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

BIN
wallpapers/city.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
wallpapers/hobbits.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

BIN
wallpapers/singlestatue.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 KiB

BIN
wallpapers/statues.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

BIN
wallpapers/tree.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB