forked from pub-solar/os
develop#graphical: init
This commit is contained in:
parent
60ac8ec1ea
commit
42f2f27183
|
@ -5,6 +5,7 @@ in
|
|||
{
|
||||
imports = [
|
||||
../users/nrd.nix
|
||||
../profiles/graphical
|
||||
];
|
||||
|
||||
|
||||
|
|
93
profiles/graphical/default.nix
Normal file
93
profiles/graphical/default.nix
Normal file
|
@ -0,0 +1,93 @@
|
|||
{ config, pkgs, ... }:
|
||||
let
|
||||
inherit (builtins)
|
||||
readFile
|
||||
;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./sway
|
||||
];
|
||||
|
||||
sound.enable = true;
|
||||
|
||||
environment = {
|
||||
etc = {
|
||||
"xdg/gtk-3.0/settings.ini" = {
|
||||
text = ''
|
||||
[ Settings ]
|
||||
gtk-icon-theme-name=Papirus-Adapta
|
||||
gtk-theme-name=Adapta
|
||||
gtk-cursor-theme-name=Adwaita
|
||||
'';
|
||||
mode = "444";
|
||||
};
|
||||
|
||||
"xdg/qutebrowser/config.py".text = let
|
||||
mpv = "${pkgs.mpv}/bin/mpv";
|
||||
in
|
||||
''
|
||||
${readFile ./qutebrowser/config.py}
|
||||
|
||||
config.bind(',m', 'hint links spawn -d ${mpv} {hint-url}')
|
||||
config.bind(',v', 'spawn -d ${mpv} {url}')
|
||||
'';
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
# default browser
|
||||
BROWSER = "qute";
|
||||
|
||||
# Theme settings
|
||||
QT_QPA_PLATFORMTHEME = "gtk2";
|
||||
GDK_PIXBUF_MODULE_FILE =
|
||||
"$(echo ${pkgs.librsvg.out}/lib/gdk-pixbuf-2.0/*/loaders.cache)";
|
||||
GTK2_RC_FILES = let
|
||||
gtk = ''
|
||||
gtk-icon-theme-name="Papirus-Adapta"
|
||||
gtk-cursor-theme-name="Adwaita"
|
||||
'';
|
||||
in
|
||||
[
|
||||
(''${ pkgs.writeText "iconrc" "${gtk}" }'')
|
||||
"${pkgs.adapta-gtk-theme}/share/themes/Adapta/gtk-2.0/gtkrc"
|
||||
"${pkgs.gnome3.gnome-themes-extra}/share/themes/Adwaita/gtk-2.0/gtkrc"
|
||||
];
|
||||
};
|
||||
|
||||
systemPackages = with pkgs; [
|
||||
adapta-gtk-theme
|
||||
cursor
|
||||
dzen2
|
||||
feh
|
||||
ffmpeg_4
|
||||
gnome3.adwaita-icon-theme
|
||||
gnome-themes-extra
|
||||
imagemagick
|
||||
imlib2
|
||||
librsvg
|
||||
libsForQt5.qtstyleplugins
|
||||
mpv
|
||||
networkmanager_dmenu
|
||||
papirus-icon-theme
|
||||
qute
|
||||
qutebrowser
|
||||
youtubeDL
|
||||
zathura
|
||||
];
|
||||
};
|
||||
|
||||
nixpkgs.overlays = let
|
||||
qutebrowser = self: super: {
|
||||
qute = super.writeShellScriptBin "qute" ''
|
||||
${super.qutebrowser}/bin/qutebrowser -C /etc/xdg/qutebrowser/config.py "$@"
|
||||
'';
|
||||
|
||||
cursor = super.writeTextDir "share/icons/default/index.theme" ''
|
||||
[icon theme]
|
||||
Inherits=Adwaita
|
||||
'';
|
||||
};
|
||||
in
|
||||
[ qutebrowser ];
|
||||
}
|
281
profiles/graphical/qutebrowser/config.py
Normal file
281
profiles/graphical/qutebrowser/config.py
Normal file
|
@ -0,0 +1,281 @@
|
|||
# Documentation:
|
||||
# qute://help/configuring.html
|
||||
# qute://help/settings.html
|
||||
|
||||
# Uncomment this to still load settings configured via autoconfig.yml
|
||||
# config.load_autoconfig()
|
||||
|
||||
# Require a confirmation before quitting the application.
|
||||
# Type: ConfirmQuit
|
||||
# Valid values:
|
||||
# - always: Always show a confirmation.
|
||||
# - multiple-tabs: Show a confirmation if multiple tabs are opened.
|
||||
# - downloads: Show a confirmation if downloads are running
|
||||
# - never: Never show a confirmation.
|
||||
c.confirm_quit = ['downloads']
|
||||
|
||||
# Additional arguments to pass to Qt, without leading `--`. With
|
||||
# QtWebEngine, some Chromium arguments (see
|
||||
# https://peter.sh/experiments/chromium-command-line-switches/ for a
|
||||
# list) will work.
|
||||
# Type: List of String
|
||||
c.qt.args = [
|
||||
'disable-reading-from-canvas', 'enable-native-gpu-memory-buffers',
|
||||
'force-webrtc-ip-handling-policy=default_public_interface_only',
|
||||
'no-sandbox'
|
||||
]
|
||||
|
||||
# Allow websites to request geolocations.
|
||||
# Type: BoolAsk
|
||||
# Valid values:
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.geolocation = False
|
||||
|
||||
# Value to send in the `DNT` header. When this is set to true,
|
||||
# qutebrowser asks websites to not track your identity. If set to null,
|
||||
# the DNT header is not sent at all.
|
||||
# Type: Bool
|
||||
c.content.headers.do_not_track = True
|
||||
|
||||
# Enable host blocking.
|
||||
# Type: Bool
|
||||
c.content.host_blocking.enabled = False
|
||||
|
||||
# Allow JavaScript to read from or write to the clipboard. With
|
||||
# QtWebEngine, writing the clipboard as response to a user interaction
|
||||
# is always allowed.
|
||||
# Type: Bool
|
||||
c.content.javascript.can_access_clipboard = False
|
||||
|
||||
# Allow JavaScript to open new tabs without user interaction.
|
||||
# Type: Bool
|
||||
c.content.javascript.can_open_tabs_automatically = False
|
||||
|
||||
# Enable JavaScript.
|
||||
# Type: Bool
|
||||
c.content.javascript.enabled = True
|
||||
|
||||
# Enable JavaScript.
|
||||
# Type: Bool
|
||||
config.set('content.javascript.enabled', True, 'file://*')
|
||||
|
||||
# Enable JavaScript.
|
||||
# Type: Bool
|
||||
config.set('content.javascript.enabled', True, 'chrome://*/*')
|
||||
|
||||
# Enable JavaScript.
|
||||
# Type: Bool
|
||||
config.set('content.javascript.enabled', True, 'qute://*/*')
|
||||
|
||||
# Allow locally loaded documents to access remote URLs.
|
||||
# Type: Bool
|
||||
c.content.local_content_can_access_remote_urls = False
|
||||
|
||||
# Allow locally loaded documents to access other local URLs.
|
||||
# Type: Bool
|
||||
c.content.local_content_can_access_file_urls = True
|
||||
|
||||
# Enable support for HTML 5 local storage and Web SQL.
|
||||
# Type: Bool
|
||||
c.content.local_storage = True
|
||||
|
||||
# Allow websites to record audio/video.
|
||||
# Type: BoolAsk
|
||||
# Valid values:
|
||||
# - true
|
||||
# - false
|
||||
# - ask
|
||||
c.content.media_capture = 'ask'
|
||||
|
||||
# Enable plugins in Web pages.
|
||||
# Type: Bool
|
||||
c.content.plugins = False
|
||||
|
||||
# Draw the background color and images also when the page is printed.
|
||||
# Type: Bool
|
||||
c.content.print_element_backgrounds = True
|
||||
|
||||
# Open new windows in private browsing mode which does not record
|
||||
# visited pages.
|
||||
# Type: Bool
|
||||
c.content.private_browsing = False
|
||||
|
||||
# Enable WebGL.
|
||||
# Type: Bool
|
||||
c.content.webgl = True
|
||||
|
||||
# Monitor load requests for cross-site scripting attempts. Suspicious
|
||||
# scripts will be blocked and reported in the inspector's JavaScript
|
||||
# console. Enabling this feature might have an impact on performance.
|
||||
# Type: Bool
|
||||
c.content.xss_auditing = True
|
||||
|
||||
# What to display in the download filename input.
|
||||
# Type: String
|
||||
# Valid values:
|
||||
# - path: Show only the download path.
|
||||
# - filename: Show only download filename.
|
||||
# - both: Show download path and filename.
|
||||
c.downloads.location.suggestion = 'filename'
|
||||
|
||||
# Where to show the downloaded files.
|
||||
# Type: VerticalPosition
|
||||
# Valid values:
|
||||
# - top
|
||||
# - bottom
|
||||
c.downloads.position = 'top'
|
||||
|
||||
# Duration (in milliseconds) to wait before removing finished downloads.
|
||||
# If set to -1, downloads are never removed.
|
||||
# Type: Int
|
||||
c.downloads.remove_finished = 8000
|
||||
|
||||
# Automatically enter insert mode if an editable element is focused
|
||||
# after loading the page.
|
||||
# Type: Bool
|
||||
c.input.insert_mode.auto_load = True
|
||||
|
||||
# Leave insert mode if a non-editable element is clicked.
|
||||
# Type: Bool
|
||||
c.input.insert_mode.auto_leave = True
|
||||
|
||||
# Duration (in milliseconds) to show messages in the statusbar for. Set
|
||||
# to 0 to never clear messages.
|
||||
# Type: Int
|
||||
c.messages.timeout = 8000
|
||||
|
||||
# Enable smooth scrolling for web pages. Note smooth scrolling does not
|
||||
# work with the `:scroll-px` command.
|
||||
# Type: Bool
|
||||
c.scrolling.smooth = True
|
||||
|
||||
# Languages to use for spell checking. You can check for available
|
||||
# languages and install dictionaries using scripts/dictcli.py. Run the
|
||||
# script with -h/--help for instructions.
|
||||
# Type: List of String
|
||||
# Valid values:
|
||||
# - af-ZA: Afrikaans (South Africa)
|
||||
# - bg-BG: Bulgarian (Bulgaria)
|
||||
# - ca-ES: Catalan (Spain)
|
||||
# - cs-CZ: Czech (Czech Republic)
|
||||
# - da-DK: Danish (Denmark)
|
||||
# - de-DE: German (Germany)
|
||||
# - el-GR: Greek (Greece)
|
||||
# - en-AU: English (Australia)
|
||||
# - en-CA: English (Canada)
|
||||
# - en-GB: English (United Kingdom)
|
||||
# - en-US: English (United States)
|
||||
# - es-ES: Spanish (Spain)
|
||||
# - et-EE: Estonian (Estonia)
|
||||
# - fa-IR: Farsi (Iran)
|
||||
# - fo-FO: Faroese (Faroe Islands)
|
||||
# - fr-FR: French (France)
|
||||
# - he-IL: Hebrew (Israel)
|
||||
# - hi-IN: Hindi (India)
|
||||
# - hr-HR: Croatian (Croatia)
|
||||
# - hu-HU: Hungarian (Hungary)
|
||||
# - id-ID: Indonesian (Indonesia)
|
||||
# - it-IT: Italian (Italy)
|
||||
# - ko: Korean
|
||||
# - lt-LT: Lithuanian (Lithuania)
|
||||
# - lv-LV: Latvian (Latvia)
|
||||
# - nb-NO: Norwegian (Norway)
|
||||
# - nl-NL: Dutch (Netherlands)
|
||||
# - pl-PL: Polish (Poland)
|
||||
# - pt-BR: Portuguese (Brazil)
|
||||
# - pt-PT: Portuguese (Portugal)
|
||||
# - ro-RO: Romanian (Romania)
|
||||
# - ru-RU: Russian (Russia)
|
||||
# - sh: Serbo-Croatian
|
||||
# - sk-SK: Slovak (Slovakia)
|
||||
# - sl-SI: Slovenian (Slovenia)
|
||||
# - sq: Albanian
|
||||
# - sr: Serbian
|
||||
# - sv-SE: Swedish (Sweden)
|
||||
# - ta-IN: Tamil (India)
|
||||
# - tg-TG: Tajik (Tajikistan)
|
||||
# - tr-TR: Turkish (Turkey)
|
||||
# - uk-UA: Ukrainian (Ukraine)
|
||||
# - vi-VN: Vietnamese (Viet Nam)
|
||||
c.spellcheck.languages = ['en-US']
|
||||
|
||||
# Position of the tab bar.
|
||||
# Type: Position
|
||||
# Valid values:
|
||||
# - top
|
||||
# - bottom
|
||||
# - left
|
||||
# - right
|
||||
c.tabs.position = 'top'
|
||||
|
||||
# When to show the tab bar.
|
||||
# Type: String
|
||||
# Valid values:
|
||||
# - always: Always show the tab bar.
|
||||
# - never: Always hide the tab bar.
|
||||
# - multiple: Hide the tab bar if only one tab is open.
|
||||
# - switching: Show the tab bar when switching tabs.
|
||||
c.tabs.show = 'switching'
|
||||
|
||||
# Search engines which can be used via the address bar. Maps a search
|
||||
# engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}`
|
||||
# placeholder. The placeholder will be replaced by the search term, use
|
||||
# `{{` and `}}` for literal `{`/`}` signs. The search engine named
|
||||
# `DEFAULT` is used when `url.auto_search` is turned on and something
|
||||
# else than a URL was entered to be opened. Other search engines can be
|
||||
# used by prepending the search engine name to the search term, e.g.
|
||||
# `:open google qutebrowser`.
|
||||
# Type: Dict
|
||||
c.url.searchengines = {
|
||||
'DEFAULT': 'https://duckduckgo.com/?q={}',
|
||||
'y': 'https://youtube.com/results?search_query={}',
|
||||
'w': 'https://en.wikipedia.org/w/index.php?search={}',
|
||||
'aw': 'https://wiki.archlinux.org/index.php?search={}',
|
||||
'g': 'https://www.google.com/search?source=&q={}',
|
||||
'gi': 'https://www.google.com/search?tbm=isch&q={}',
|
||||
'aur': 'https://aur.archlinux.org/packages/?O=0&K={}',
|
||||
'c': 'https://en.cppreference.com/w/cpp/keyword/{}',
|
||||
'r': 'https://doc.rust-lang.org/stable/std/?search={}'
|
||||
}
|
||||
|
||||
c.url.start_pages = ['https://nixos.org/nixos/manual/options.html']
|
||||
|
||||
c.hints.chars = "asdfghjklvbcntyruewom"
|
||||
|
||||
# Font color for hints.
|
||||
# Type: QssColor
|
||||
c.colors.hints.fg = '#EFF0EB'
|
||||
|
||||
# Background color for hints. Note that you can use a `rgba(...)` value
|
||||
# for transparency.
|
||||
# Type: QssColor
|
||||
c.colors.hints.bg = '#1E1F29'
|
||||
|
||||
# Font color for the matched part of hints.
|
||||
# Type: QssColor
|
||||
c.colors.hints.match.fg = '#5AF78E'
|
||||
|
||||
# Default monospace fonts. Whenever "monospace" is used in a font
|
||||
# setting, it's replaced with the fonts listed here.
|
||||
# Type: Font
|
||||
c.fonts.monospace = 'monospace'
|
||||
|
||||
# leave listed modes easily with <a-j>
|
||||
for mode in\
|
||||
['caret', 'command', 'hint',
|
||||
'insert', 'passthrough', 'prompt',
|
||||
'yesno']:
|
||||
config.bind('<Alt+j>', 'leave-mode', mode=mode)
|
||||
|
||||
# Bindings for normal mode
|
||||
config.bind(',p', 'spawn --userscript qute-pass')
|
||||
config.bind(',P', 'set-cmd-text -s :open -p')
|
||||
config.bind(',r', 'restart')
|
||||
config.bind(',c', 'config-source')
|
||||
config.bind(';I', 'hint images download')
|
||||
config.bind('X', 'undo')
|
||||
config.bind('d', 'scroll-page 0 0.5')
|
||||
config.bind('u', 'scroll-page 0 -0.5')
|
||||
config.bind('x', 'tab-close')
|
238
profiles/graphical/sway/config
Normal file
238
profiles/graphical/sway/config
Normal file
|
@ -0,0 +1,238 @@
|
|||
### Variables
|
||||
#
|
||||
# Logo key. Use Mod1 for Alt.
|
||||
set $mod Mod4
|
||||
# Home row direction keys, like vim
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
# preferred terminal emulator
|
||||
set $term alacritty -e tmux new-session -A -snrd
|
||||
|
||||
# preferred browser
|
||||
set $browser qute
|
||||
|
||||
# Your preferred application launcher
|
||||
# Note: it's recommended that you pass the final command to sway
|
||||
set $menu dmenu_path | dmenu -b | xargs swaymsg exec --
|
||||
|
||||
# network manager
|
||||
set $net_menu networkmanager_dmenu -b
|
||||
|
||||
# don't show window titles only show single pixel as border
|
||||
default_border pixel
|
||||
|
||||
set $φ 38 ppt
|
||||
set $Φ 62 ppt
|
||||
|
||||
# reusable regexes
|
||||
set $media "mpv|retroarch"
|
||||
|
||||
### Autostart configuration
|
||||
# launch browser and tmux session in $terminal on launch
|
||||
|
||||
for_window [app_id="Alacritty"] resize set width $φ
|
||||
exec $browser
|
||||
exec $term
|
||||
|
||||
### idle configuration
|
||||
|
||||
exec swayidle -w \
|
||||
timeout 300 'loginctl lock-session' \
|
||||
timeout 300 'swaymsg "output * dpms off"' \
|
||||
resume 'swaymsg "output * dpms on"' \
|
||||
lock 'swaylock -e -f -c 000000' \
|
||||
before-sleep 'loginctl lock-session'
|
||||
|
||||
for_window [class=".*"] inhibit_idle fullscreen
|
||||
for_window [app_id=".*"] inhibit_idle fullscreen
|
||||
|
||||
### Input configuration
|
||||
#
|
||||
# Example configuration:
|
||||
#
|
||||
input "2:7:SynPS/2_Synaptics_TouchPad" {
|
||||
dwt disable
|
||||
tap enabled
|
||||
natural_scroll enabled
|
||||
middle_emulation enabled
|
||||
pointer_accel 1
|
||||
}
|
||||
|
||||
# hide mouse cursor after one second
|
||||
seat seat0 {
|
||||
hide_cursor 1000
|
||||
}
|
||||
#
|
||||
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||
# Read `man 5 sway-input` for more information about this section.
|
||||
|
||||
### Key bindings
|
||||
#
|
||||
# Basics:
|
||||
#
|
||||
# Start a terminal
|
||||
bindsym $mod+Return exec $term
|
||||
|
||||
# Start browser
|
||||
bindsym $mod+Shift+b exec $browser
|
||||
|
||||
# Kill focused window
|
||||
bindsym $mod+Shift+c kill
|
||||
|
||||
# Start your launcher
|
||||
bindsym $mod+d exec $menu
|
||||
|
||||
# start network manager
|
||||
bindsym $mod+n exec $net_menu
|
||||
|
||||
# lock screen
|
||||
bindsym $mod+Ctrl+l exec loginctl lock-session
|
||||
|
||||
# go fullscreen
|
||||
bindsym $mod+f fullscreen
|
||||
|
||||
# display volume level when pushed
|
||||
bindsym XF86AudioRaiseVolume exec $volume
|
||||
bindsym XF86AudioLowerVolume exec $volume
|
||||
bindsym XF86AudioMute exec $volume
|
||||
|
||||
# Drag floating windows by holding down $mod and left mouse button.
|
||||
# Resize them with right mouse button + $mod.
|
||||
# Despite the name, also works for non-floating windows.
|
||||
# Change normal to inverse to use left mouse button for resizing and right
|
||||
# mouse button for dragging.
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Reload the configuration file
|
||||
bindsym $mod+Shift+q reload
|
||||
|
||||
# Exit sway (logs you out of your Wayland session)
|
||||
bindsym $mod+Shift+e exec 'swaymsg exit'
|
||||
#
|
||||
# Moving around:
|
||||
#
|
||||
# Move your focus around
|
||||
bindsym $mod+$left focus left
|
||||
bindsym $mod+$down focus down
|
||||
bindsym $mod+$up focus up
|
||||
bindsym $mod+$right focus right
|
||||
# Or use $mod+[up|down|left|right]
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# Move the focused window with the same, but add Shift
|
||||
bindsym $mod+Shift+$left move left
|
||||
bindsym $mod+Shift+$down move down
|
||||
bindsym $mod+Shift+$up move up
|
||||
bindsym $mod+Shift+$right move right
|
||||
# Ditto, with arrow keys
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
#
|
||||
# Workspaces:
|
||||
#
|
||||
# Switch to workspace
|
||||
bindsym $mod+1 workspace 1:main
|
||||
bindsym $mod+2 workspace 2
|
||||
bindsym $mod+3 workspace 3
|
||||
bindsym $mod+4 workspace 4
|
||||
bindsym $mod+5 workspace 5
|
||||
bindsym $mod+6 workspace 6:media
|
||||
bindsym $mod+7 workspace 7
|
||||
bindsym $mod+8 workspace 8
|
||||
bindsym $mod+9 workspace 9
|
||||
bindsym $mod+0 workspace 10
|
||||
# Move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace 1:main
|
||||
bindsym $mod+Shift+2 move container to workspace 2
|
||||
bindsym $mod+Shift+3 move container to workspace 3
|
||||
bindsym $mod+Shift+4 move container to workspace 4
|
||||
bindsym $mod+Shift+5 move container to workspace 5
|
||||
bindsym $mod+Shift+6 move container to workspace 6:media
|
||||
bindsym $mod+Shift+7 move container to workspace 7
|
||||
bindsym $mod+Shift+8 move container to workspace 8
|
||||
bindsym $mod+Shift+9 move container to workspace 9
|
||||
bindsym $mod+Shift+0 move container to workspace 10
|
||||
# Note: workspaces can have any name you want, not just numbers.
|
||||
# We just use 1-10 as the default.
|
||||
assign [app_id=$media] workspace 6:media
|
||||
for_window [app_id=$media] fullscreen enable
|
||||
# [app_id=$media] focus
|
||||
#
|
||||
# Layout stuff:
|
||||
#
|
||||
# You can "split" the current object of your focus with
|
||||
# $mod+b or $mod+v, for horizontal and vertical splits
|
||||
# respectively.
|
||||
bindsym $mod+b splith
|
||||
bindsym $mod+v splitv
|
||||
|
||||
# Switch the current container between different layout styles
|
||||
bindsym $mod+s layout stacking
|
||||
bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# Toggle the current focus between tiling and floating mode
|
||||
bindsym $mod+t floating toggle
|
||||
|
||||
# Swap focus between the tiling area and the floating area
|
||||
bindsym $mod+Shift+t focus mode_toggle
|
||||
|
||||
# resize window to approximately φ ratio of screen
|
||||
bindsym $mod+Shift+space exec swaymsg resize set width $φ
|
||||
bindsym $mod+space exec swaymsg resize set width $Φ
|
||||
|
||||
# Move focus to the parent container
|
||||
bindsym $mod+a focus parent
|
||||
#
|
||||
# Scratchpad:
|
||||
#
|
||||
# Sway has a "scratchpad", which is a bag of holding for windows.
|
||||
# You can send windows there and get them back later.
|
||||
|
||||
# Move the currently focused window to the scratchpad
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
|
||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||
# If there are multiple scratchpad windows, this command cycles through them.
|
||||
bindsym $mod+minus scratchpad show
|
||||
#
|
||||
# Resizing containers:
|
||||
#
|
||||
mode "resize" {
|
||||
# left will shrink the containers width
|
||||
# right will grow the containers width
|
||||
# up will shrink the containers height
|
||||
# down will grow the containers height
|
||||
bindsym $left resize shrink width 10px
|
||||
bindsym $down resize grow height 10px
|
||||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
|
||||
# Ditto, with arrow keys
|
||||
bindsym Left resize shrink width 10px
|
||||
bindsym Down resize grow height 10px
|
||||
bindsym Up resize shrink height 10px
|
||||
bindsym Right resize grow width 10px
|
||||
|
||||
# Return to default mode
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
#
|
||||
# Status Bar:
|
||||
#
|
||||
# Read `man 5 sway-bar` for more information about this section.
|
||||
bar {
|
||||
swaybar_command waybar
|
||||
}
|
||||
|
||||
exec "systemctl --user import-environment; systemctl --user start sway-session.target"
|
113
profiles/graphical/sway/default.nix
Normal file
113
profiles/graphical/sway/default.nix
Normal file
|
@ -0,0 +1,113 @@
|
|||
{ lib, config, options, pkgs, ... }:
|
||||
let
|
||||
inherit (builtins)
|
||||
readFile
|
||||
;
|
||||
|
||||
inherit (config.hardware)
|
||||
pulseaudio
|
||||
;
|
||||
in
|
||||
{
|
||||
programs.sway = {
|
||||
enable = true;
|
||||
|
||||
extraSessionCommands = ''
|
||||
export SDL_VIDEODRIVER=wayland
|
||||
# needs qt5.qtwayland in systemPackages
|
||||
export QT_QPA_PLATFORM=wayland
|
||||
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
|
||||
# Fix for some Java AWT applications (e.g. Android Studio),
|
||||
# use this if they aren't displayed properly:
|
||||
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||
'';
|
||||
|
||||
extraPackages = with pkgs; options.programs.sway.extraPackages.default
|
||||
++ [
|
||||
qt5.qtwayland
|
||||
alacritty
|
||||
volnoti
|
||||
wl-clipboard
|
||||
(waybar.override { pulseSupport = pulseaudio.enable; })
|
||||
]
|
||||
;
|
||||
};
|
||||
|
||||
environment.etc = {
|
||||
"sway/config".text = let
|
||||
volnoti = pkgs.writeScript "volnoti.sh" (import ./volnoti.nix { inherit pkgs; });
|
||||
in
|
||||
''
|
||||
set $volume ${volnoti}
|
||||
|
||||
# set background
|
||||
output * bg ${pkgs.adapta-backgrounds}/share/backgrounds/adapta/tri-fadeno.jpg fill
|
||||
|
||||
${readFile ./config}
|
||||
'';
|
||||
|
||||
"xdg/waybar".source = ./waybar;
|
||||
};
|
||||
|
||||
services.redshift = {
|
||||
enable = true;
|
||||
brightness.night = "0.7";
|
||||
temperature.night = 3200;
|
||||
};
|
||||
|
||||
location = {
|
||||
latitude = 38.833881;
|
||||
longitude = -104.821365;
|
||||
};
|
||||
|
||||
systemd.user.targets.sway-session = {
|
||||
enable = true;
|
||||
description = "sway compositor session";
|
||||
documentation = [ "man:systemd.special(7)" ];
|
||||
|
||||
bindsTo = [ "graphical-session.target" ];
|
||||
wants = [ "graphical-session-pre.target" ];
|
||||
after = [ "graphical-session-pre.target" ];
|
||||
requiredBy = [ "graphical-session.target" "graphical-session-pre.target" ];
|
||||
};
|
||||
|
||||
systemd.user.services.volnoti = {
|
||||
enable = true;
|
||||
description = "volnoti volume notification";
|
||||
documentation = [ "volnoti --help" ];
|
||||
wantedBy = [ "sway-session.target" ];
|
||||
|
||||
script = ''${pkgs.volnoti}/bin/volnoti -n'';
|
||||
|
||||
serviceConfig = {
|
||||
Restart = "always";
|
||||
RestartSec = 3;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = let
|
||||
overlay = self: super: {
|
||||
redshift = super.redshift.overrideAttrs (
|
||||
o: {
|
||||
src = super.fetchFromGitHub {
|
||||
owner = "CameronNemo";
|
||||
repo = "redshift";
|
||||
rev = "39c162ca487a59857c2eac231318f4b28855798b";
|
||||
sha256 = "1in27draskwwi097wiam26bx2szcf58297am3gkyng1ms3rz6i58";
|
||||
};
|
||||
}
|
||||
);
|
||||
wl-clipboard = super.wl-clipboard.overrideAttrs (
|
||||
o: {
|
||||
src = super.fetchFromGitHub {
|
||||
owner = "bugaevc";
|
||||
repo = "wl-clipboard";
|
||||
rev = "c010972e6b0d2eb3002c49a6a1b5620ff5f7c910";
|
||||
sha256 = "020l3jy9gsj6gablwdfzp1wfa8yblay3axdjc56i9q8pbhz7g12j";
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
in
|
||||
[ overlay ];
|
||||
}
|
19
profiles/graphical/sway/volnoti.nix
Normal file
19
profiles/graphical/sway/volnoti.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs, ... }:
|
||||
let
|
||||
inherit (pkgs) alsaUtils bash gnugrep volnoti;
|
||||
in
|
||||
''
|
||||
#!${bash}/bin/bash
|
||||
|
||||
declare -i current=$(${alsaUtils}/bin/amixer get Master | ${gnugrep}/bin/grep -m1 -Po "[0-9]+(?=%)")
|
||||
if [[ $current -gt 100 ]]; then
|
||||
current=100
|
||||
fi
|
||||
|
||||
|
||||
if ${alsaUtils}/bin/amixer get Master | ${gnugrep}/bin/grep -Fq "[off]"; then
|
||||
${volnoti}/bin/volnoti-show -m $current
|
||||
else
|
||||
${volnoti}/bin/volnoti-show $current
|
||||
fi
|
||||
''
|
77
profiles/graphical/sway/waybar/config
Normal file
77
profiles/graphical/sway/waybar/config
Normal file
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"layer": "top", // Waybar at top layer
|
||||
// Choose the order of the modules
|
||||
"modules-left": ["sway/workspaces", "sway/mode"],
|
||||
"modules-center": ["sway/window"],
|
||||
"modules-right": ["cpu", "memory", "temperature", "backlight", "pulseaudio", "network", "battery", "clock", "tray"],
|
||||
// Modules configuration
|
||||
"sway/mode": {
|
||||
"format": "<span style=\"italic\">{}</span>"
|
||||
},
|
||||
"clock": {
|
||||
"format": "{:%l:%M %P}",
|
||||
"tooltip-format": "{:%Y-%m-%d | %l:%M %P}",
|
||||
"format-alt": "{:%Y-%m-%d}"
|
||||
},
|
||||
"cpu": {
|
||||
"format": "{usage}% ",
|
||||
"tooltip": false
|
||||
},
|
||||
"memory": {
|
||||
"format": "{}% "
|
||||
},
|
||||
"temperature": {
|
||||
// "thermal-zone": 2,
|
||||
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
||||
"critical-threshold": 80,
|
||||
// "format-critical": "{temperatureC}°C {icon}",
|
||||
"format": "{temperatureC}°C {icon}",
|
||||
"format-icons": ["", "", ""]
|
||||
},
|
||||
"backlight": {
|
||||
"format": "{percent}% {icon}",
|
||||
"format-icons": ["", ""]
|
||||
},
|
||||
"battery": {
|
||||
"states": {
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-charging": "{capacity}% ",
|
||||
"format-plugged": "{capacity}% ",
|
||||
"format-alt": "{time} {icon}",
|
||||
// "format-good": "", // An empty format will hide the module
|
||||
// "format-full": "",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
},
|
||||
"network": {
|
||||
"format-wifi": "{essid} ({signalStrength}%) ",
|
||||
"format-ethernet": "{ifname}: {ipaddr}/{cidr} ",
|
||||
"format-linked": "{ifname} (No IP) ",
|
||||
"format-disconnected": "Disconnected ⚠",
|
||||
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
||||
},
|
||||
"pulseaudio": {
|
||||
// "scroll-step": 1, // %, can be a float
|
||||
"format": "{volume}% {icon} {format_source}",
|
||||
"format-bluetooth": "{volume}% {icon} {format_source}",
|
||||
"format-bluetooth-muted": " {icon} {format_source}",
|
||||
"format-muted": " {format_source}",
|
||||
"format-source": "{volume}% ",
|
||||
"format-source-muted": "",
|
||||
"format-icons": {
|
||||
"headphones": "",
|
||||
"handsfree": "",
|
||||
"headset": "",
|
||||
"phone": "",
|
||||
"portable": "",
|
||||
"car": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 21,
|
||||
"spacing": 10
|
||||
}
|
||||
}
|
122
profiles/graphical/sway/waybar/style.css
Normal file
122
profiles/graphical/sway/waybar/style.css
Normal file
|
@ -0,0 +1,122 @@
|
|||
* {
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
font-family: Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: rgba(43, 48, 59, 0.5);
|
||||
border-bottom: 3px solid rgba(100, 114, 125, 0.5);
|
||||
color: #ffffff;
|
||||
transition-property: background-color;
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
/*
|
||||
window#waybar.empty {
|
||||
background-color: transparent;
|
||||
}
|
||||
window#waybar.solo {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
*/
|
||||
|
||||
window#waybar.termite {
|
||||
background-color: #3F3F3F;
|
||||
}
|
||||
|
||||
window#waybar.chromium {
|
||||
background-color: #000000;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
border-bottom: 3px solid transparent;
|
||||
}
|
||||
|
||||
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||
#workspaces button:hover {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
box-shadow: inherit;
|
||||
border-bottom: 3px solid #ffffff;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: #64727D;
|
||||
border-bottom: 3px solid #ffffff;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: #eb4d4b;
|
||||
}
|
||||
|
||||
#mode {
|
||||
background-color: #64727D;
|
||||
border-bottom: 3px solid #ffffff;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor {
|
||||
padding: 0 10px;
|
||||
margin: 0 4px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: #ffffff;
|
||||
background-color: #26A65B;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: #f53c3c;
|
||||
color: #ffffff;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
label:focus {
|
||||
background-color: #000000;
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: #f53c3c;
|
||||
}
|
||||
|
||||
#pulseaudio.muted {
|
||||
background-color: #90b1b1;
|
||||
color: #2a5c45;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: #eb4d4b;
|
||||
}
|
||||
|
|
@ -41,6 +41,13 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
ytdl-format = "bestvideo[height<=?1080]+bestaudio/best";
|
||||
};
|
||||
};
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
|
||||
|
|
Loading…
Reference in a new issue