├── LICENSE ├── Makefile ├── README.md ├── ananicy.d ├── 00-cgroups.cgroups ├── 00-default │ ├── DEs-and-WMs │ │ ├── awesome_wm.rules │ │ ├── bspwm.rules │ │ ├── compton-picom.rules │ │ ├── gnome.rules │ │ ├── i3.rules │ │ ├── lightdm.rules │ │ ├── lxdm.rules │ │ ├── openbox.rules │ │ ├── plank.rules │ │ ├── plasma.rules │ │ ├── polybar.rules │ │ ├── sddm.rules │ │ ├── sway.rules │ │ ├── sxhkd.rules │ │ ├── weston.rules │ │ ├── xfce4.rules │ │ ├── xmonad.rules │ │ ├── xorg.rules │ │ └── xwayland.rules │ ├── TODO-clean-up │ │ ├── NetworkManager.rules │ │ ├── gpg-agent.rules │ │ ├── keepassxc.rules │ │ ├── ntfs-3g.rules │ │ ├── quiterss.rules │ │ ├── speedcrunch.rules │ │ └── wayst.rules │ ├── VMs │ │ ├── qemu.rules │ │ ├── virtualbox.rules │ │ └── vmware.rules │ ├── VPNs │ │ ├── mullvad.rules │ │ ├── openvpn.rules │ │ └── tailscale.rules │ ├── _systemd.rules │ ├── alarm-clock.rules │ ├── archivers │ │ ├── 7z.rules │ │ ├── FileRoller.rules │ │ ├── _archivers.rules │ │ ├── ark.rules │ │ └── xarchiver.rules │ ├── aria2c.rules │ ├── audio-servers │ │ ├── pipewire.rules │ │ └── pulseaudio.rules │ ├── borg.rules │ ├── chat │ │ ├── dino.rules │ │ ├── discord.rules │ │ ├── franz.rules │ │ ├── google-messages.rules │ │ ├── guilded.rules │ │ ├── hexchat.rules │ │ ├── kotatogram.rules │ │ ├── qtox.rules │ │ ├── riot.rules │ │ ├── rocket.chat.rules │ │ ├── signal-desktop.rules │ │ ├── skype.rules │ │ ├── slack.rules │ │ ├── teams.rules │ │ ├── telegram.rules │ │ ├── viber.rules │ │ ├── vk.rules │ │ ├── weechat.rules │ │ └── zoom.rules │ ├── clamd.rules │ ├── clang-tidy.rules │ ├── cmus.rules │ ├── collectd.rules │ ├── common-utilities │ │ └── rsync.rules │ ├── compilers │ │ ├── cmake.rules │ │ ├── g++.rules │ │ ├── gcc.rules │ │ ├── go.rules │ │ ├── javac.rules │ │ ├── make.rules │ │ ├── meson.rules │ │ └── rust.rules │ ├── coreutils.rules │ ├── curl.rules │ ├── databases │ │ └── mysqld.rules │ ├── depricated-Heavy_CPU │ │ ├── boinc.rules │ │ ├── dart_flutter.rules │ │ ├── dupeguru.rules │ │ ├── fahclient.rules │ │ ├── imagemagick.rules │ │ └── soundkonverter.rules │ ├── document-editors │ │ ├── cuda-text.rules │ │ ├── geany.rules │ │ ├── kate.rules │ │ ├── leafpad.rules │ │ ├── libreoffice.rules │ │ ├── meld.rules │ │ ├── micro.rules │ │ ├── mousepad.rules │ │ ├── nano.rules │ │ ├── sublime-merge.rules │ │ ├── sublime-text.rules │ │ ├── vim.rules │ │ ├── vscode.rules │ │ └── vscodium.rules │ ├── document-viewers │ │ ├── FoxitReader.rules │ │ ├── calibre.rules │ │ ├── evince.rules │ │ ├── gitkraken.rules │ │ ├── okular.rules │ │ ├── xviewer.rules │ │ └── zathura.rules │ ├── duperemove.rules │ ├── email-clients │ │ ├── mailspring.rules │ │ └── thunderbird.rules │ ├── fail2ban-server.rules │ ├── fdupes.rules │ ├── file-managers │ │ ├── doublecmd.rules │ │ ├── krusader.rules │ │ ├── lf.rules │ │ ├── mc.rules │ │ ├── pcmanfm.rules │ │ └── thunar.rules │ ├── file-sync │ │ ├── dropbox.rules │ │ ├── insync.rules │ │ ├── megasync.rules │ │ ├── nextcloud.rules │ │ ├── onedrive.rules │ │ ├── owncloud.rules │ │ ├── rclone.rules │ │ └── syncthing.rules │ ├── gamehub.rules │ ├── games │ │ ├── 0ad.rules │ │ ├── _steam.rules │ │ ├── blastem.rules │ │ ├── cen64.rules │ │ ├── descent.rules │ │ ├── diablo.rules │ │ ├── dolphin-emu.rules │ │ ├── doom.rules │ │ ├── doom3.rules │ │ ├── doom64.rules │ │ ├── dukenukem.rules │ │ ├── etlegacy.rules │ │ ├── fsuae.rules │ │ ├── guildwars2.rules │ │ ├── heroic-launcher.rules │ │ ├── hexen2.rules │ │ ├── itch-launcher.rules │ │ ├── kerbal-space-program.rules │ │ ├── madness-project-nexus.rules │ │ ├── mame.rules │ │ ├── marathon.rules │ │ ├── mednafen.rules │ │ ├── mesen.rules │ │ ├── minetest.rules │ │ ├── osu-lazer.rules │ │ ├── ppsspp.rules │ │ ├── projectzomboid.rules │ │ ├── quake.rules │ │ ├── quake2.rules │ │ ├── quake3.rules │ │ ├── rct2.rules │ │ ├── rimworld.rules │ │ ├── rott.rules │ │ ├── rpcs3.rules │ │ ├── rtcw.rules │ │ ├── skyrim.rules │ │ ├── starcraft2.rules │ │ ├── stellaris.rules │ │ ├── supertuxkart.rules │ │ ├── syndicate.rules │ │ ├── torchlight.rules │ │ ├── universe-sandbox-2.rules │ │ ├── unreal.rules │ │ ├── warframe.rules │ │ ├── watchdogs1.rules │ │ ├── watchdogs2.rules │ │ ├── wolfenstein3d.rules │ │ ├── xonotic.rules │ │ └── yuzu.rules │ ├── gerbera.rules │ ├── git-annex.rules │ ├── gnur.rules │ ├── handbrake.rules │ ├── higan.rules │ ├── htop.rules │ ├── image-editors │ │ ├── gimp.rules │ │ ├── inkscape.rules │ │ └── krita.rules │ ├── image-viewers │ │ ├── eog.rules │ │ ├── feh.rules │ │ ├── gpicview.rules │ │ ├── mirage.rules │ │ ├── nomacs.rules │ │ ├── nsxiv.rules │ │ ├── qimgv.rules │ │ ├── shotwell.rules │ │ └── sxiv.rules │ ├── kbfsfuse.rules │ ├── kget.rules │ ├── kupfer.rules │ ├── mednaffe.rules │ ├── melt.rules │ ├── music-players │ │ ├── ario.rules │ │ ├── audacious.rules │ │ ├── clementine.rules │ │ ├── deadbeef.rules │ │ ├── moc.rules │ │ ├── mpd.rules │ │ ├── ncmpcpp.rules │ │ ├── nuclear.rules │ │ ├── qmmp.rules │ │ ├── rhythmbox.rules │ │ └── spotify.rules │ ├── node.rules │ ├── nvdock.rules │ ├── p2p-clients │ │ ├── amule.rules │ │ └── soulseekqt.rules │ ├── package-managers │ │ ├── archlinux.rules │ │ ├── paru.rules │ │ └── yay.rules │ ├── psensor.rules │ ├── rambox.rules │ ├── recoll.rules │ ├── redshift.rules │ ├── remote-desktops │ │ ├── anydesk.rules │ │ ├── remmina.rules │ │ ├── teamviewer.rules │ │ └── vnc-viewer.rules │ ├── restic.rules │ ├── rmlint.rules │ ├── sabnzbd.rules │ ├── screenshotters │ │ ├── flameshot.rules │ │ ├── shutter.rules │ │ └── xfce4-screenshooter.rules │ ├── servers │ │ ├── apache2.rules │ │ ├── blocky.rules │ │ ├── dnscrypt-proxy.rules │ │ ├── dnsmasq.rules │ │ ├── php-cgi.rules │ │ └── unbound.rules │ ├── services │ │ ├── blueman-blueberry.rules │ │ ├── bluetoothd.rules │ │ ├── cups.rules │ │ ├── freenet.rules │ │ ├── gamemoded.rules │ │ └── yacy.rules │ ├── smartd.rules │ ├── ssh.rules │ ├── terminals │ │ ├── alacritty.rules │ │ ├── guake.rules │ │ ├── kitty.rules │ │ ├── konsole.rules │ │ ├── st.rules │ │ ├── tilix.rules │ │ ├── tmux.rules │ │ ├── urxvt.rules │ │ ├── wezterm.rules │ │ ├── xterm.rules │ │ └── yakuake.rules │ ├── thermald.rules │ ├── tor.rules │ ├── torrents │ │ ├── deluge.rules │ │ ├── ktorrent.rules │ │ ├── qBittorrent.rules │ │ ├── rtorrent.rules │ │ ├── tixati.rules │ │ ├── transmission.rules │ │ └── webtorrent.rules │ ├── ue4.rules │ ├── unison.rules │ ├── uptimed.rules │ ├── video-players │ │ ├── SVP.rules │ │ ├── acestream.rules │ │ ├── celluloid.rules │ │ ├── jellyfin-media-player.rules │ │ ├── mplayer.rules │ │ ├── mpv.rules │ │ ├── plex.rules │ │ ├── smplayer.rules │ │ ├── sopcast.rules │ │ ├── stremio.rules │ │ ├── totem.rules │ │ ├── vlc.rules │ │ └── youtube-music.rules │ ├── web-browsers │ │ ├── brave.rules │ │ ├── chromium-based.rules │ │ ├── firefox-based-browsers.rules │ │ ├── qtwebengine.rules │ │ ├── surf.rules │ │ └── vivaldi.rules │ ├── wget.rules │ ├── wine │ │ ├── Battlerite.rules │ │ ├── README │ │ ├── Remnant.rules │ │ ├── RocketLeague.rules │ │ ├── Steam.exe.rules │ │ ├── TERA.exe.rules │ │ ├── TheOuterWorlds.rules │ │ ├── alienvspredator.rules │ │ ├── anachronox.rules │ │ ├── assassinscreed.rules │ │ ├── batman.rules │ │ ├── battle.net.rules │ │ ├── beyondtwosouls.rules │ │ ├── bioshock.rules │ │ ├── bloodrayne.rules │ │ ├── bloodstained.rules │ │ ├── borderlands.rules │ │ ├── callofcthulhu.rules │ │ ├── castlevania.rules │ │ ├── ccremastered.rules │ │ ├── chaser.rules │ │ ├── commongameexe.rules │ │ ├── condemned.rules │ │ ├── control.rules │ │ ├── cyberpunk2077.rules │ │ ├── darksouls.rules │ │ ├── deadspace.rules │ │ ├── detroitbecomehuman.rules │ │ ├── deusex.rules │ │ ├── disgaea.rules │ │ ├── dishonored.rules │ │ ├── divinityos.rules │ │ ├── dragonage.rules │ │ ├── dukenukem.rules │ │ ├── dungeonsiege.rules │ │ ├── dxball2.rules │ │ ├── environmentalstationalpha.rules │ │ ├── evilgenius.rules │ │ ├── expendable.rules │ │ ├── fable.rules │ │ ├── fallout.rules │ │ ├── fear.rules │ │ ├── gothic.rules │ │ ├── grandia.rules │ │ ├── gta.rules │ │ ├── hitman.rules │ │ ├── judgedredd.rules │ │ ├── killer7.rules │ │ ├── killing-floor-2.rules │ │ ├── kingoffighters.rules │ │ ├── kingpin.rules │ │ ├── lanoire.rules │ │ ├── lastblade.rules │ │ ├── lego.rules │ │ ├── manhunt.rules │ │ ├── masseffect.rules │ │ ├── maxpayne.rules │ │ ├── minoria.rules │ │ ├── morrowind.rules │ │ ├── ninokuni.rules │ │ ├── nosferatu.rules │ │ ├── oblivion.rules │ │ ├── octopathtraveler.rules │ │ ├── painkiller.rules │ │ ├── redfaction.rules │ │ ├── residentevil.rules │ │ ├── roguetrooper.rules │ │ ├── rtypedimensionsex.rules │ │ ├── rune.rules │ │ ├── samuraishodown.rules │ │ ├── shenmue.rules │ │ ├── shogo.rules │ │ ├── sin.rules │ │ ├── smite.rules │ │ ├── soldat.rules │ │ ├── stalker.rules │ │ ├── starcitizen.rules │ │ ├── systemshock2.rules │ │ ├── teso.rules │ │ ├── theascent.rules │ │ ├── thief.rules │ │ ├── totalannihilation.rules │ │ ├── underrail.rules │ │ ├── unreal.rules │ │ ├── uplay.rules │ │ ├── vtmb.rules │ │ ├── witcher.rules │ │ ├── wows.rules │ │ ├── wrathaor.rules │ │ └── ys.rules │ └── youtube-dl.rules ├── 00-types.types ├── ananicy.conf └── rules.broken ├── ananicy.py ├── ananicy.service ├── disabled-rules ├── DEs-and-WMs │ └── _kde.rules ├── audacity.rules ├── bees.rules ├── bitwig-studio.rules ├── blender.rules ├── display-link-manager.rules ├── ffmpeg.rules ├── fluxbox.rules ├── linphone.rules ├── mixxx.rules ├── parsec.rules ├── remote-viewer.rules ├── rstudio.rules ├── samba.rules ├── spectrwm.rules ├── thrash-protect.rules └── wineserver.rules └── package.sh /Makefile: -------------------------------------------------------------------------------- 1 | PREFIX ?= / 2 | 3 | SRC_DIR := $(dir $(lastword $(MAKEFILE_LIST))) 4 | 5 | ANANICY_D_R := $(shell find $(SRC_DIR)/ananicy.d -type f -name "*.rules") 6 | ANANICY_D_R_I := $(patsubst $(SRC_DIR)/%.rules, $(PREFIX)/etc/%.rules, $(ANANICY_D_R)) 7 | 8 | ANANICY_D_T := $(shell find $(SRC_DIR)/ananicy.d -type f -name "*.types") 9 | ANANICY_D_T_I := $(patsubst $(SRC_DIR)/%.types, $(PREFIX)/etc/%.types, $(ANANICY_D_T)) 10 | 11 | ANANICY_D_G := $(shell find $(SRC_DIR)/ananicy.d -type f -name "*.cgroups") 12 | ANANICY_D_G_I := $(patsubst $(SRC_DIR)/%.cgroups, $(PREFIX)/etc/%.cgroups, $(ANANICY_D_G)) 13 | 14 | A_SERVICE := $(PREFIX)/lib/systemd/system/ananicy.service 15 | A_CONF := $(PREFIX)/etc/ananicy.d/ananicy.conf 16 | A_BIN := $(PREFIX)/usr/bin/ananicy 17 | 18 | 19 | default: help 20 | 21 | $(PREFIX)/etc/%.cgroups: $(SRC_DIR)/%.cgroups 22 | install -Dm644 $< $@ 23 | 24 | $(PREFIX)/etc/%.types: $(SRC_DIR)/%.types 25 | install -Dm644 $< $@ 26 | 27 | $(PREFIX)/etc/%.rules: $(SRC_DIR)/%.rules 28 | install -Dm644 $< $@ 29 | 30 | $(A_CONF): $(SRC_DIR)/ananicy.d/ananicy.conf 31 | install -Dm644 $< $@ 32 | 33 | $(A_BIN): $(SRC_DIR)/ananicy.py 34 | install -Dm755 $< $@ 35 | 36 | $(A_SERVICE): $(SRC_DIR)/ananicy.service 37 | install -Dm644 $< $@ 38 | 39 | 40 | install: ## Install ananicy 41 | install: $(A_CONF) $(A_BIN) 42 | install: $(A_SERVICE) 43 | install: $(ANANICY_D_G_I) 44 | install: $(ANANICY_D_T_I) 45 | install: $(ANANICY_D_R_I) 46 | 47 | uninstall: ## Delete ananicy 48 | uninstall: 49 | @rm -fv $(A_CONF) 50 | @rm -rf $(A_BIN) 51 | @rm -rf $(A_SERVICE) 52 | @rm -rf $(ANANICY_D_G_I) 53 | @rm -rf $(ANANICY_D_T_I) 54 | @rm -rf $(ANANICY_D_R_I) 55 | 56 | 57 | deb: ## Create debian package 58 | deb: 59 | ./package.sh debian 60 | 61 | help: ## Show help 62 | @grep -h "##" $(MAKEFILE_LIST) | grep -v grep | sed -e 's/\\$$//' | column -t -s '##' 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ananicy 2 | 3 | ## Installation 4 | 5 | * ![logo](http://www.monitorix.org/imgs/archlinux.png "arch logo") Arch: [AUR/minq-ananicy-git](https://aur.archlinux.org/packages/minq-ananicy-git). `paru -S minq-ananicy-git` or `yay -S minq-ananicy-git` should do the trick. Don't forget to start and enable the service by running `sudo systemctl start ananicy.service` and `sudo systemctl enable ananicy.service`. 6 | 7 | For more information [click here](https://github.com/kuche1/minq-ananicy#installation-1) 8 | 9 | ## What's new? 10 | 11 | More, updated and better organised rules. 12 | 13 | Support for cmdline in rules added. This is particularly useful for applications that share the same name (looking at you Java). See the `freenet` rule as an example: 14 | ``` 15 | { "name": "java", "cmdlines": ["freenet.node.NodeStarter"], "type": "service" } 16 | ``` 17 | This translates to: apply the rule to any process named `java`, that received `freenet.node.NodeStarter` as a command line argument. You can add more than one "cmdlines" in case you want to fine tune your rules. 18 | 19 | # Old description 20 | 21 | ## Description 22 | Ananicy (ANother Auto NICe daemon) — is a shell daemon created to manage processes' [IO](http://linux.die.net/man/1/ionice) and [CPU](http://linux.die.net/man/1/nice) priorities, with community-driven set of rules for popular applications (anyone may add their own rule via github's [pull request](https://help.github.com/articles/using-pull-requests/) mechanism). It's mainly for desktop usage. 23 | 24 | I just wanted a tool for auto set programs nice in my system, i.e.: 25 | * Why do I get lag, while compiling kernel and playing games? 26 | * Why does dropbox client eat all my IO? 27 | * Why does torrent/dc client make my laptop run slower? 28 | * ... 29 | 30 | Use ananicy to fix these problems! 31 | 32 | ## Versions 33 | ``` 34 | X.Y.Z where 35 | X - Major version, 36 | Y - Script version - reset on each major update 37 | Z - Rules version - reset on each script update 38 | ``` 39 | Read more about semantic versioning [here](http://semver.org/) 40 | 41 | ## Installation 42 | To use ananicy you must have systemd installed. 43 | 44 | You can install ananicy manually by: 45 | ``` 46 | $ git clone https://github.com/Nefelim4ag/Ananicy.git /tmp/ananicy 47 | $ cd /tmp/ananicy 48 | $ sudo make install 49 | ``` 50 | * ![logo](http://www.monitorix.org/imgs/archlinux.png "arch logo") Arch: [AUR/ananicy-git](https://aur.archlinux.org/packages/ananicy-git). 51 | * Debian/Ubuntu: use [package.sh](https://raw.githubusercontent.com/Nefelim4ag/Ananicy/master/package.sh) in repo 52 | ``` 53 | $ git clone https://github.com/Nefelim4ag/Ananicy.git 54 | $ ./Ananicy/package.sh debian 55 | $ sudo dpkg -i ./Ananicy/ananicy-*.deb 56 | ``` 57 | 58 | Enable 59 | ``` 60 | $ sudo systemctl enable ananicy 61 | $ sudo systemctl start ananicy 62 | ``` 63 | ## Configuration 64 | Rules files should be placed under `/etc/ananicy.d/` directory and have `*.rules` extension. 65 | Inside .rules file every process is described on a separate line. General syntax is described below: 66 | 67 | ``` 68 | { "name": "gcc", "type": "Heavy_CPU", "nice": 19, "ioclass": "best-effort", "ionice": 7, "cgroup": "cpu90" } 69 | ``` 70 | 71 | All fields except `name` are optional. 72 | 73 | `name` used for match processes by exec bin name 74 | ``` 75 | ~ basename $(sudo realpath /proc/1/exe) 76 | systemd 77 | ``` 78 | 79 | Currently matching by other things is not supported. 80 | 81 | You can check what Ananicy sees, by: 82 | ``` 83 | ananicy dump proc 84 | ``` 85 | 86 | Ananicy loads all rules in ram while starting, so to apply rules, you must restart the service. 87 | 88 | Available ionice values: 89 | ``` 90 | $ man ionice 91 | ``` 92 | 93 | ## Simple rules for writing rules 94 | CFQ IO Scheduller also uses `nice` for internal scheduling, so it's mean processes with same IO class and IO priority, but with different nicceness will take advantages of `nice` also for IO. 95 | 96 | 1. Avoid changing `nice` of system wide process like initrd. 97 | 2. Please try to use full process name (or name with `^$` symbols like `NAME=^full_name$`) 98 | 3. When writing rule - try to only use `nice`, it must be enough in most cases. 99 | 4. Don't try set to high priority! Niceness can fix some performance problems, but can't give you more. 100 | Example: pulseaudio uses `nice` -11 by default, if you set other cpu hungry task, with `nice` {-20..-12} you can catch a sound glitches. 101 | 5. For CPU hungry backround task like compiling, just use `NICE=19`. 102 | 103 | About IO priority: 104 | 105 | 1. It's useful to use `{"ioclass": "idle"}` for IO hungry background tasks like: file indexers, Cloud Clients, Backups and etc. 106 | 2. It's not cool to set realtime to all tasks. The RT scheduling class is given first access to the disk, regardless of what else is going on in the system. Thus the RT class needs to be used with some care, as it can starve other processes. So try to use ioclass first. 107 | 108 | ## Debugging 109 | Get ananicy output with journalctl: 110 | ``` 111 | $ journalctl -efu ananicy.service 112 | ``` 113 | 114 | ### Missing `schedtool` 115 | If you see this error in the output 116 | ``` 117 | Jan 24 09:44:18 tony-dev ananicy[13783]: ERRO: Missing schedtool! Abort! 118 | ``` 119 | Fix it in Ubuntu with 120 | ``` 121 | sudo apt install schedtool 122 | ``` 123 | 124 | ### Submitting new rules 125 | 126 | Please use pull request, thanks 127 | -------------------------------------------------------------------------------- /ananicy.d/00-cgroups.cgroups: -------------------------------------------------------------------------------- 1 | # Cgroups definitions 2 | # Currently very simple, only for group CPU intensive tasks 3 | 4 | # cpuquota same as systemd CPUQuota, 5 | # only difference is - meaning of N% is all CPUs, not one core. 6 | { "cgroup": "cpu90", "CPUQuota": 90 } 7 | { "cgroup": "cpu80", "CPUQuota": 80 } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/awesome_wm.rules: -------------------------------------------------------------------------------- 1 | # https://awesomewm.org 2 | { "name": "awesome", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/bspwm.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/baskerville/bspwm 2 | { "name": "bspwm", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/compton-picom.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/chjj/compton 2 | # https://github.com/yshui/picom 3 | { "name": "compton", "type": "DEWM" } 4 | { "name": "picom", "type": "DEWM" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/gnome.rules: -------------------------------------------------------------------------------- 1 | # http://live.gnome.org/ThumbnailerSpec 2 | { "name": "tumblerd", "type": "TODO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/i3.rules: -------------------------------------------------------------------------------- 1 | # https://i3wm.org/ 2 | { "name": "i3", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/lightdm.rules: -------------------------------------------------------------------------------- 1 | # Rule for lightdm display manager, starts the Xorg server 2 | { "name": "lightdm", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/lxdm.rules: -------------------------------------------------------------------------------- 1 | # display manager 2 | { "name" : "lxdm-binary", "type": "DEWM"} 3 | { "name" : "lxdm-session", "type": "DEWM"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/openbox.rules: -------------------------------------------------------------------------------- 1 | # http://openbox.org/ 2 | { "name": "openbox", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/plank.rules: -------------------------------------------------------------------------------- 1 | # Plank dock: https://launchpad.net/plank 2 | # dock should work fast as part of realiable desktop 3 | { "name": "plank", "type": "DEWM" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/plasma.rules: -------------------------------------------------------------------------------- 1 | {"name": "plasmashell", "type": "DEWM"} 2 | {"name": "kwin_x11", "type": "DEWM"} 3 | {"name": "kwin_wayland", "type": "DEWM"} 4 | {"name": "kwin_wayland_wrapper", "type": "DEWM"} 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/polybar.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/polybar/polybar 2 | { "name": "polybar", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/sddm.rules: -------------------------------------------------------------------------------- 1 | # SDDM is a modern display manager for X11 and Wayland 2 | { "name" : "sddm", "type": "DEWM"} 3 | { "name" : "sddm-helper", "type": "DEWM"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/sway.rules: -------------------------------------------------------------------------------- 1 | # https://swaywm.org/ 2 | { "name": "sway", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/sxhkd.rules: -------------------------------------------------------------------------------- 1 | # keyboard shortcut manager 2 | # disabled as it causes all spawned processes to inherih type 3 | # { "name": "sxhkd", "type": "DEWM" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/weston.rules: -------------------------------------------------------------------------------- 1 | # https://gitlab.freedesktop.org/wayland/weston/ 2 | { "name": "weston", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/xfce4.rules: -------------------------------------------------------------------------------- 1 | { "name":"xfwm4", "type":"DEWM"} 2 | { "name":"xfsettingsd", "type":"DEWM"} 3 | { "name":"xfce4-session", "type":"DEWM"} 4 | { "name":"xfconfd", "type":"DEWM"} 5 | { "name":"xfce4-appfinder", "type":"DEWM"} 6 | { "name":"xfce4-notifyd", "type":"DEWM"} 7 | { "name":"xfce4-panel", "type":"DEWM"} 8 | { "name":"xfdesktop", "type":"DEWM"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/xmonad.rules: -------------------------------------------------------------------------------- 1 | # http://xmonad.org 2 | # http://projects.haskell.org/xmobar/ 3 | { "name": "xmobar", "type": "DEWM" } 4 | { "name": "xmonad-x86_64-linux", "type": "DEWM" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/xorg.rules: -------------------------------------------------------------------------------- 1 | # Rule for Xorg server, runs the graphical desktop. 2 | { "name": "Xorg", "type": "DEWM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/DEs-and-WMs/xwayland.rules: -------------------------------------------------------------------------------- 1 | {"name": "Xwayland", "type": "DEWM"} 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/NetworkManager.rules: -------------------------------------------------------------------------------- 1 | # NetworkManager 2 | {"name": "NetworkManager", "type": "TODO"} 3 | {"name": "nm-applet", "type": "TODO"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/gpg-agent.rules: -------------------------------------------------------------------------------- 1 | # gpg 2 | {"name":"gpg-agent", "type":"TODO"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/keepassxc.rules: -------------------------------------------------------------------------------- 1 | # KeePassXC password manager: https://keepassxc.org/ 2 | { "name": "keepassxc", "type":"TODO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/ntfs-3g.rules: -------------------------------------------------------------------------------- 1 | # mount.ntfs in userspace 2 | { "name": "ntfs-3g", "type": "TODO" } 3 | { "name": "mount.ntfs", "type": "TODO" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/quiterss.rules: -------------------------------------------------------------------------------- 1 | # QuiteRSS RSS reader: https://quiterss.org/ 2 | { "name": "quiterss", "type": "TODO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/speedcrunch.rules: -------------------------------------------------------------------------------- 1 | # https://speedcrunch.org 2 | { "name": "speedcrunch", "type": "TODO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/TODO-clean-up/wayst.rules: -------------------------------------------------------------------------------- 1 | # wayst: https://github.com/91861/wayst 2 | { "name": "wayst", "type": "TODO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VMs/qemu.rules: -------------------------------------------------------------------------------- 1 | #Fast Processor Emulator https://www.qemu.org/ 2 | { "name": "qemu-system-x86_64", "type": "VM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VMs/virtualbox.rules: -------------------------------------------------------------------------------- 1 | # VirtualBox: https://www.virtualbox.org 2 | { "name": "VirtualBoxVM", "type": "VM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VMs/vmware.rules: -------------------------------------------------------------------------------- 1 | { "name": "vmware-vmx", "type": "VM" } 2 | { "name": "vmware", "type": "VM" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VPNs/mullvad.rules: -------------------------------------------------------------------------------- 1 | # Mullvad daemon: https://mullvad.net/ 2 | { "name" : "mullvad-daemon", "type" : "VPN" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VPNs/openvpn.rules: -------------------------------------------------------------------------------- 1 | # Openvpn https://openvpn.net/ 2 | { "name" : "openvpn", "type" : "VPN" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/VPNs/tailscale.rules: -------------------------------------------------------------------------------- 1 | # tailscale daemon: https://tailscale.com/ 2 | { "name" : "tailscaled", "type" : "VPN" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/_systemd.rules: -------------------------------------------------------------------------------- 1 | # https://www.freedesktop.org/wiki/Software/systemd/ 2 | { "name": "systemd-timesyncd", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/alarm-clock.rules: -------------------------------------------------------------------------------- 1 | # Alarm scheduler: https://github.com/shaggytwodope/alarm-clock 2 | { "name": "alarm-clock", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/archivers/7z.rules: -------------------------------------------------------------------------------- 1 | # 7zip: https://www.7-zip.org 2 | {"name": "7z", "type": "archiver"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/archivers/FileRoller.rules: -------------------------------------------------------------------------------- 1 | # https://wiki.gnome.org/Apps/FileRoller 2 | { "name": "file-roller", "type": "archiver" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/archivers/_archivers.rules: -------------------------------------------------------------------------------- 1 | { "name": "bzip2", "type": "archiver" } 2 | { "name": "gzip", "type": "archiver" } 3 | { "name": "lz4", "type": "archiver" } 4 | { "name": "lzma", "type": "archiver" } 5 | { "name": "lzop", "type": "archiver" } 6 | { "name": "xz", "type": "archiver" } 7 | { "name": "zstd", "type": "archiver" } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/archivers/ark.rules: -------------------------------------------------------------------------------- 1 | # ark KDE archiver 2 | {"name": "ark", "type": "archiver"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/archivers/xarchiver.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/ib/xarchiver 2 | {"name": "xarchiver", "type": "archiver"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/aria2c.rules: -------------------------------------------------------------------------------- 1 | # aria2 - lightweight download utility: https://aria2.github.io/ 2 | { "name": "aria2c", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/audio-servers/pipewire.rules: -------------------------------------------------------------------------------- 1 | {"name": "pipewire", "type": "audio-server"} 2 | {"name": "pipewire-pulse", "type": "audio-server"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/audio-servers/pulseaudio.rules: -------------------------------------------------------------------------------- 1 | { "name": "pulseaudio", "type": "audio-server" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/borg.rules: -------------------------------------------------------------------------------- 1 | { "name": "borg", "type": "BG_CPUIO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/dino.rules: -------------------------------------------------------------------------------- 1 | # https://dino.im/ 2 | { "name": "dino", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/discord.rules: -------------------------------------------------------------------------------- 1 | # Discord: https://discordapp.com/ 2 | { "name": "Discord", "type": "chat" } 3 | { "name": "DiscordPTB", "type": "chat" } 4 | { "name": "DiscordCanary", "type": "chat" } 5 | { "name": "DiscordDevelopment", "type": "chat" } 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/franz.rules: -------------------------------------------------------------------------------- 1 | # Messaging app for WhatsApp, Facebook Messenger, Slack, Telegram and more: https://meetfranz.com/ 2 | { "name": "franz", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/google-messages.rules: -------------------------------------------------------------------------------- 1 | # Google Messages: https://github.com/kelyvin/Google-Messages-For-Desktop 2 | { "name": "GoogleMessages", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/guilded.rules: -------------------------------------------------------------------------------- 1 | # Guilded: https://www.guilded.gg/ 2 | { "name": "guilded", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/hexchat.rules: -------------------------------------------------------------------------------- 1 | # https://hexchat.github.io 2 | { "name": "hexchat", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/kotatogram.rules: -------------------------------------------------------------------------------- 1 | # Kotatogram: https://github.com/kotatogram/kotatogram-desktop 2 | { "name": "kotatogram-desktop", "type": "chat" } 3 | { "name": "kotatogram-desktop.bin", "type": "chat" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/qtox.rules: -------------------------------------------------------------------------------- 1 | # Tox client: https://github.com/qTox/qTox 2 | { "name": "qtox", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/riot.rules: -------------------------------------------------------------------------------- 1 | # Riot: https://about.riot.im/ 2 | { "name": "riot-web", "type": "chat" } 3 | 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/rocket.chat.rules: -------------------------------------------------------------------------------- 1 | # Rocket.Chat - https://www.guilded.gg/ 2 | { "name": "rocketchat-desktop", "type": "chat" } 3 | { "name": "rocketchat-desk", "type": "chat" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/signal-desktop.rules: -------------------------------------------------------------------------------- 1 | # Signal Desktop: https://signal.org/ 2 | # Signal is a cross-platform centralized encrypted instant messaging service 3 | { "name": "signal-desktop", "type": "chat" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/skype.rules: -------------------------------------------------------------------------------- 1 | # Skype: https://www.skype.com 2 | { "name": "skypeforlinux", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/slack.rules: -------------------------------------------------------------------------------- 1 | # https://slack.com 2 | { "name": "slack", "type":"chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/teams.rules: -------------------------------------------------------------------------------- 1 | # Teams: https://teams.microsoft.com/downloads#allDevicesSection 2 | { "name": "teams", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/telegram.rules: -------------------------------------------------------------------------------- 1 | # https://desktop.telegram.org/ 2 | { "name": "telegram-desktop", "type": "chat" } 3 | { "name": "telegram-desktop.bin", "type": "chat" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/viber.rules: -------------------------------------------------------------------------------- 1 | # https://www.viber.com 2 | { "name": "viber", "type":"chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/vk.rules: -------------------------------------------------------------------------------- 1 | # http://vk.com/messenger 2 | { "name": "vk", "type":"chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/weechat.rules: -------------------------------------------------------------------------------- 1 | # weechat: https://weechat.org/ 2 | { "name": "weechat", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/chat/zoom.rules: -------------------------------------------------------------------------------- 1 | # Zoom - https://zoom.us 2 | { "name": "zoom", "type": "chat" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/clamd.rules: -------------------------------------------------------------------------------- 1 | # ClamAV Daemon 2 | { "name": "clamd", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/clang-tidy.rules: -------------------------------------------------------------------------------- 1 | { "name": "clang-tidy", "type": "BG_CPUIO" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/cmus.rules: -------------------------------------------------------------------------------- 1 | # Music player: https://cmus.github.io/ 2 | { "name": "cmus", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/collectd.rules: -------------------------------------------------------------------------------- 1 | # The system statistics collection daemon: https://collectd.org/ 2 | { "name": "collectd", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/common-utilities/rsync.rules: -------------------------------------------------------------------------------- 1 | { "name": "rsync", "type": "common-utility" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/cmake.rules: -------------------------------------------------------------------------------- 1 | # family of tools designed to build, test and package software: https://cmake.org/ 2 | { "name":"cmake", "type":"compiler" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/g++.rules: -------------------------------------------------------------------------------- 1 | { "name": "g++", "type": "compiler" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/gcc.rules: -------------------------------------------------------------------------------- 1 | { "name": "gcc", "type": "compiler" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/go.rules: -------------------------------------------------------------------------------- 1 | # https://golang.org/ 2 | { "name": "go", "type": "compiler" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/javac.rules: -------------------------------------------------------------------------------- 1 | { "name": "javac", "type": "compiler" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/make.rules: -------------------------------------------------------------------------------- 1 | # make - GNU make utility to maintain groups of programs 2 | { "name":"make", "type":"compiler" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/meson.rules: -------------------------------------------------------------------------------- 1 | # http://mesonbuild.com - Meson is an open source build system. 2 | { "name": "ninja", "type": "compiler" } 3 | { "name": "meson", "type": "compiler" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/compilers/rust.rules: -------------------------------------------------------------------------------- 1 | { "name": "cargo", "type": "compiler" } 2 | { "name": "rustc", "type": "compiler" } 3 | { "name": "rust-analyzer", "type": "compiler" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/coreutils.rules: -------------------------------------------------------------------------------- 1 | # Some rules for computationally or IO expensive tools from the GNU coreutils 2 | { "name": "cat", "type": "BG_CPUIO" } 3 | { "name": "cksum", "type": "BG_CPUIO" } 4 | { "name": "comm", "type": "BG_CPUIO" } 5 | { "name": "dd", "type": "BG_CPUIO" } 6 | { "name": "df", "type": "BG_CPUIO" } 7 | { "name": "du", "type": "BG_CPUIO" } 8 | { "name": "install", "type": "BG_CPUIO" } 9 | { "name": "join", "type": "BG_CPUIO" } 10 | { "name": "md5sum", "type": "BG_CPUIO" } 11 | { "name": "mkdir", "type": "BG_CPUIO" } 12 | { "name": "mv", "type": "BG_CPUIO" } 13 | { "name": "rm", "type": "BG_CPUIO" } 14 | { "name": "rmdir", "type": "BG_CPUIO" } 15 | { "name": "sha1sum", "type": "BG_CPUIO" } 16 | { "name": "sha256sum", "type": "BG_CPUIO" } 17 | { "name": "sha384sum", "type": "BG_CPUIO" } 18 | { "name": "sha512sum", "type": "BG_CPUIO" } 19 | { "name": "shred", "type": "BG_CPUIO" } 20 | { "name": "sort", "type": "BG_CPUIO" } 21 | { "name": "sum", "type": "BG_CPUIO" } 22 | { "name": "tac", "type": "BG_CPUIO" } 23 | { "name": "tee", "type": "BG_CPUIO" } 24 | { "name": "wc", "type": "BG_CPUIO" } 25 | -------------------------------------------------------------------------------- /ananicy.d/00-default/curl.rules: -------------------------------------------------------------------------------- 1 | # curl - URL retrieval utility and library: https://curl.haxx.se 2 | { "name": "curl", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/databases/mysqld.rules: -------------------------------------------------------------------------------- 1 | { "name": "mysqld", "type": "database" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/boinc.rules: -------------------------------------------------------------------------------- 1 | # Boinc client https://boinc.berkeley.edu/ 2 | { "name": "boinc", "type": "Heavy_CPU" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/dart_flutter.rules: -------------------------------------------------------------------------------- 1 | { "name": "flutter", "type": "Heavy_CPU" } 2 | { "name": "dart", "type": "Heavy_CPU" } -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/dupeguru.rules: -------------------------------------------------------------------------------- 1 | # dupeGuru - finds duplicate files: https://www.hardcoded.net/dupeguru/ 2 | { "name": "dupeguru", "type": "Heavy_CPU" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/fahclient.rules: -------------------------------------------------------------------------------- 1 | # Folding@home client https://foldingathome.org/ 2 | { "name": "FAHClient", "type": "Heavy_CPU" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/imagemagick.rules: -------------------------------------------------------------------------------- 1 | # ImageMagick - image viewing/manipulation program: https://imagemagick.org 2 | { "name": "convert", "type": "Heavy_CPU" } 3 | { "name": "montage", "type": "Heavy_CPU" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/depricated-Heavy_CPU/soundkonverter.rules: -------------------------------------------------------------------------------- 1 | # KDE frontend to many audio converter tools 2 | { "name": "soundkonverter", "type": "Heavy_CPU" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/cuda-text.rules: -------------------------------------------------------------------------------- 1 | # https://cudatext.github.io/ 2 | { "name": "cudatext", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/geany.rules: -------------------------------------------------------------------------------- 1 | # https://www.geany.org/ 2 | { "name": "geany", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/kate.rules: -------------------------------------------------------------------------------- 1 | # Kate: https://kate-editor.org/ 2 | { "name": "kate", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/leafpad.rules: -------------------------------------------------------------------------------- 1 | # leafpad text editor 2 | { "name": "leafpad", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/libreoffice.rules: -------------------------------------------------------------------------------- 1 | # https://www.documentfoundation.org 2 | { "name": "oosplash", "type": "document-editor" } 3 | { "name": "soffice.bin", "type": "document-editor" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/meld.rules: -------------------------------------------------------------------------------- 1 | # http://meldmerge.org 2 | { "name": "meld", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/micro.rules: -------------------------------------------------------------------------------- 1 | # https://micro-editor.github.io/ 2 | { "name": "micro", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/mousepad.rules: -------------------------------------------------------------------------------- 1 | # Xfce Mousepad text editor 2 | { "name": "mousepad", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/nano.rules: -------------------------------------------------------------------------------- 1 | # text editor 2 | { "name": "nano", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/sublime-merge.rules: -------------------------------------------------------------------------------- 1 | # GUI git client: https://www.sublimemerge.com/ 2 | { "name": "sublime_merge", "type":"document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/sublime-text.rules: -------------------------------------------------------------------------------- 1 | # https://www.sublimetext.com 2 | { "name": "subl", "type": "document-editor" } 3 | { "name": "subl3", "type": "document-editor" } 4 | { "name": "sublime_text", "type": "document-editor" } 5 | 6 | 7 | # This intended to work in bg 8 | # https://stackoverflow.com/questions/66203541/what-is-the-purpose-of-plugin-host-service-in-sublime-text-3 9 | { "name": "plugin_host-3.8", "type": "document-editor" } 10 | { "name": "plugin_host-3.3", "type": "document-editor" } 11 | { "name": "plugin_host", "type": "document-editor" } 12 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/vim.rules: -------------------------------------------------------------------------------- 1 | # vim: https://www.vim.org/ 2 | # nvim: https://neovim.io/ 3 | { "name": "vim", "type": "document-editor" } 4 | { "name": "nvim", "type": "document-editor" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/vscode.rules: -------------------------------------------------------------------------------- 1 | # https://code.visualstudio.com/ 2 | { "name": "code", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-editors/vscodium.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/VSCodium/vscodium 2 | { "name": "codium", "type": "document-editor" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/FoxitReader.rules: -------------------------------------------------------------------------------- 1 | # https://www.foxitsoftware.com/ru/products/pdf-reader/ 2 | { "name": "FoxitReader", "type": "document-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/calibre.rules: -------------------------------------------------------------------------------- 1 | # Calibre ebook library organiser: https://calibre-ebook.com/ 2 | { "name": "calibre", "type": "document-viewer" } 3 | { "name": "ebook-viewer", "type": "document-viewer" } 4 | { "name": "lrfviewer", "type": "document-viewer" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/evince.rules: -------------------------------------------------------------------------------- 1 | # A document viewer: https://wiki.gnome.org/Apps/Evince 2 | { "name": "evince", "type": "document-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/gitkraken.rules: -------------------------------------------------------------------------------- 1 | # https://www.gitkraken.com 2 | { "name": "gitkraken", "type":"document-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/okular.rules: -------------------------------------------------------------------------------- 1 | # Okular PDF KDE reader 2 | { "name": "okular", "type": "document-viewer" } -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/xviewer.rules: -------------------------------------------------------------------------------- 1 | # Image and document viewer: https://github.com/linuxmint/xviewer 2 | { "name": "xviewer", "type": "document-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/document-viewers/zathura.rules: -------------------------------------------------------------------------------- 1 | # document viewer: https://pwmt.org/projects/zathura 2 | { "name": "zathura", "type": "document-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/duperemove.rules: -------------------------------------------------------------------------------- 1 | # Tools for deduping file systems: https://github.com/markfasheh/duperemove 2 | { "name": "duperemove", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/email-clients/mailspring.rules: -------------------------------------------------------------------------------- 1 | # https://getmailspring.com 2 | { "name": "mailspring", "type": "email-client" } 3 | { "name": "mailsync", "type": "service" } 4 | { "name": "mailsync.bin", "type": "service" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/email-clients/thunderbird.rules: -------------------------------------------------------------------------------- 1 | # https://www.mozilla.org/en-US/thunderbird/ 2 | { "name": "thunderbird", "type": "email-client" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/fail2ban-server.rules: -------------------------------------------------------------------------------- 1 | { "name": "fail2ban-server", "type": "BG_CPUIO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/fdupes.rules: -------------------------------------------------------------------------------- 1 | # FDUPES is a program for identifying or deleting duplicate files residing within specified directories. 2 | # https://github.com/adrianlopezroche/fdupes 3 | { "name": "fdupes", "type": "BG_CPUIO" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/doublecmd.rules: -------------------------------------------------------------------------------- 1 | # Double Commander file browser: https://doublecmd.sourceforge.io/ 2 | { "name": "doublecmd", "type": "file-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/krusader.rules: -------------------------------------------------------------------------------- 1 | # Krusader is a twin panel file manager for KDE Plasma: https://krusader.org/ 2 | { "name": "krusader", "type": "file-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/lf.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/gokcehan/lf 2 | { "name": "lf", "type": "file-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/mc.rules: -------------------------------------------------------------------------------- 1 | # Midnight Commander console file browser: https://midnight-commander.org/ 2 | { "name": "mc", "type": "file-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/pcmanfm.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/lxde/pcmanfm 2 | { "name": "pcmanfm", "type": "file-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-managers/thunar.rules: -------------------------------------------------------------------------------- 1 | # Thunar is an xfce file manager: https://gitlab.xfce.org/xfce/thunar 2 | { "name": "Thunar", "type": "file-manager" } # TODO might be best to delete this one 3 | { "name": "thunar", "type": "file-manager" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/dropbox.rules: -------------------------------------------------------------------------------- 1 | # Dropbox client: https://www.dropbox.com 2 | { "name": "dropbox", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/insync.rules: -------------------------------------------------------------------------------- 1 | # Insync for Google Drive https://www.insynchq.com/ 2 | { "name": "insync", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/megasync.rules: -------------------------------------------------------------------------------- 1 | # Official MEGA.nz client: https://github.com/meganz/MEGAsync 2 | { "name": "megasync", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/nextcloud.rules: -------------------------------------------------------------------------------- 1 | # Nextcloud desktop client: https://nextcloud.com/ 2 | { "name": "nextcloud", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/onedrive.rules: -------------------------------------------------------------------------------- 1 | { "name": "onedrive", "type": "file-sync" } -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/owncloud.rules: -------------------------------------------------------------------------------- 1 | # OwnCloud desktop client: https://owncloud.org 2 | { "name": "owncloud", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/rclone.rules: -------------------------------------------------------------------------------- 1 | #Rclone - rsync for cloud storage 2 | { "name": "rclone", "type": "file-sync" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/file-sync/syncthing.rules: -------------------------------------------------------------------------------- 1 | # Syncthing client: https://syncthing.net/ 2 | {"name":"syncthing", "type":"file-sync"} 3 | {"name":"syncthing-gtk", "type":"file-sync"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/gamehub.rules: -------------------------------------------------------------------------------- 1 | # Unified games launcher: https://github.com/tkashkin/GameHub 2 | { "name": "com.github.tkashkin.gamehub", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/0ad.rules: -------------------------------------------------------------------------------- 1 | # '0 A.D.' RTS: https://play0ad.com/ 2 | { "name": "0ad", "type": "game" } 3 | { "name": "pyrogenesis", "type": "game" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/_steam.rules: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Rules for Steam and Steam Apps: http://store.steampowered.com 3 | { "name": "steam", "type": "game-launcher" } 4 | # Steam integrated web browser 5 | { "name": "steamwebhelper", "type": "BG_CPUIO" } 6 | 7 | # https://store.steampowered.com/app/730 8 | { "name": "csgo_linux64", "type": "game"} 9 | # http://store.steampowered.com/app/355180 10 | { "name": "cure_linux", "type": "game"} 11 | # http://store.steampowered.com/app/570 12 | { "name": "dota2", "type": "game"} 13 | # https://store.steampowered.com/app/70 14 | { "name": "hl_linux", "type": "game"} 15 | # http://store.steampowered.com/app/440 - Team Fortress 2 16 | {"name": "hl2_linux", "type": "game"} 17 | # http://store.steampowered.com/app/4920 18 | { "name": "ns2_linux", "type": "game"} 19 | # https://store.steampowered.com/app/620 20 | { "name": "portal2_linux", "type": "game"} 21 | 22 | ### Common bin names 23 | # https://store.steampowered.com/app/200510 24 | { "name": "game.x86_64", "type": "game"} 25 | { "name": "game.x86", "type": "game"} 26 | 27 | # https://store.steampowered.com/app/391540 28 | # https://store.steampowered.com/app/447530 29 | # https://store.steampowered.com/app/491040 30 | # https://store.steampowered.com/app/242680 31 | # https://store.steampowered.com/app/643880 32 | { "name": "runner", "type": "game"} 33 | 34 | # http://store.steampowered.com/app/41070 35 | { "name": "Sam3", "type": "game"} 36 | # http://store.steampowered.com/app/212070 37 | { "name": "StarConflict", "type": "game"} 38 | # http://store.steampowered.com/app/236390 39 | { "name": "aces", "type": "game"} 40 | # http://store.steampowered.com/app/252950 41 | { "name": "RocketLeague", "type": "game"} 42 | # http://store.steampowered.com/app/233720 43 | { "name": "ss2013.bin", "type": "game"} 44 | # http://store.steampowered.com/app/206420 45 | { "name": "SaintsRow4.i386", "type": "game"} 46 | # http://store.steampowered.com/app/203160 47 | { "name": "TombRaider", "type": "game"} 48 | # https://store.steampowered.com/app/750920/ 49 | { "name": "ShadowOfTheTombRaider", "type": "game"} 50 | # http://store.steampowered.com/app/301520 51 | { "name": "Robocraft.x86_64", "type": "game"} 52 | 53 | # http://store.steampowered.com/app/233130 54 | { "name": "ShadowWarrior.bin.x86", "type": "game"} 55 | 56 | # https://store.steampowered.com/app/394360 57 | { "name": "hoi4", "type": "game" } 58 | 59 | # https://store.steampowered.com/app/225840 60 | { "name": "svencoop_linux", "type": "game"} 61 | 62 | # https://store.steampowered.com/app/57300/ 63 | { "name": "Amnesia.bin.x86_64", "type": "game"} 64 | 65 | # https://store.steampowered.com/app/22828 66 | { "name": "BaldursGate", "type": "game"} 67 | 68 | # https://store.steampowered.com/app/257350/ 69 | { "name": "BaldursGateII", "type": "game"} 70 | 71 | # https://store.steampowered.com/app/362890/ 72 | { "name": "bms_linux", "type": "game"} 73 | 74 | # https://store.steampowered.com/app/474210 75 | { "name": "Butcher", "type": "game"} 76 | 77 | # https://store.steampowered.com/app/330020/ 78 | { "name": "ChildrenOfMorta", "type": "game"} 79 | 80 | # https://store.steampowered.com/app/368340/ 81 | { "name": "CrossCode", "type": "game"} 82 | 83 | # https://store.steampowered.com/app/373420/ 84 | { "name": "EoCApp", "type": "game"} 85 | 86 | # Enter the Gungeon 87 | { "name": "EtG.x86_64", "type": "game" } 88 | 89 | # https://store.steampowered.com/app/383930 (AND OTHER DOORWAYS GAMES) 90 | { "name": "Doorways.x86", "type": "game"} 91 | 92 | # https://store.steampowered.com/app/311690 93 | { "name": "EtG.x86_64", "type": "game"} 94 | 95 | # https://store.steampowered.com/app/265930 96 | { "name": "GoatGame", "type": "game"} 97 | 98 | # https://store.steampowered.com/app/316790 99 | { "name": "GrimFandango", "type": "game"} 100 | 101 | # https://store.steampowered.com/app/341940 102 | { "name": "Hatred-Linux-Shipping", "type": "game"} 103 | 104 | # https://store.steampowered.com/app/677120 105 | { "name": "HWR", "type": "game"} 106 | 107 | # https://store.steampowered.com/app/219150 108 | { "name": "Hotline", "type": "game"} 109 | 110 | # https://store.steampowered.com/app/274170 111 | { "name": "HotlineMiami2", "type": "game"} 112 | 113 | # https://store.steampowered.com/app/257850 114 | { "name": "HyperLightDrifter", "type": "game"} 115 | 116 | # https://store.steampowered.com/app/562860 117 | { "name": "fury.bin", "type": "game"} 118 | 119 | # https://store.steampowered.com/app/391720 120 | { "name": "LOF", "type": "game"} 121 | 122 | # https://store.steampowered.com/app/361300 123 | { "name": "Mother Russia Bleeds.x86_64", "type": "game"} 124 | 125 | # https://store.steampowered.com/app/704450 126 | { "name": "nwmain-linux", "type": "game"} 127 | 128 | # https://store.steampowered.com/app/238320 129 | { "name": "OLGame.x86_64", "type": "game"} 130 | 131 | # https://store.steampowered.com/app/239030 132 | { "name": "PapersPlease", "type": "game"} 133 | 134 | # https://store.steampowered.com/app/356570 135 | { "name": "PartyHardGame.x86_64", "type": "game"} 136 | 137 | # https://store.steampowered.com/app/466300 138 | { "name": "Torment", "type": "game"} 139 | 140 | # https://store.steampowered.com/app/559210 141 | { "name": "Rakuen.amd64", "type": "game"} 142 | 143 | # https://store.steampowered.com/app/564310 144 | { "name": "Sam2017", "type": "game"} 145 | 146 | # https://store.steampowered.com/app/294440 147 | { "name": "Shadowgate.x86", "type": "game"} 148 | 149 | # https://store.steampowered.com/app/278460 150 | { "name": "Skyborn.amd64", "type": "game"} 151 | 152 | # https://store.steampowered.com/app/405820 153 | { "name": "TurokEx", "type": "game"} 154 | 155 | # https://store.steampowered.com/app/405830 156 | { "name": "Turok2Ex", "type": "game"} 157 | 158 | # https://store.steampowered.com/app/259130 159 | { "name": "wasteland", "type": "game"} 160 | 161 | # https://store.steampowered.com/app/240760 162 | { "name": "WL2", "type": "game"} 163 | 164 | # https://store.steampowered.com/app/233550 165 | { "name": "AnotherWorld-amd64", "type": "game"} 166 | 167 | # https://store.steampowered.com/app/274520 168 | { "name": "Darkwood.x86_64", "type": "game"} 169 | 170 | # https://store.steampowered.com/app/495280 171 | { "name": "Disgaea2SteamOS", "type": "game"} 172 | 173 | # https://store.steampowered.com/app/219740 174 | # https://store.steampowered.com/app/322330 175 | { "name": "dontstarve_steam", "type": "game"} 176 | 177 | # https://store.steampowered.com/app/321800 178 | { "name": "IcewindDale", "type": "game"} 179 | 180 | # https://store.steampowered.com/app/232770 181 | { "name": "postal1", "type": "game"} 182 | 183 | # https://store.steampowered.com/app/401680 184 | { "name": "PostalREDUX-Linux-Shipping", "type": "game"} 185 | 186 | # https://store.steampowered.com/app/211820 187 | { "name": "starbound", "type": "game"} 188 | 189 | # https://store.steampowered.com/app/223470 190 | # https://store.steampowered.com/app/360960 191 | { "name": "postal2-bin", "type": "game"} 192 | { "name": "paradiselost-bin", "type": "game"} 193 | 194 | # https://store.steampowered.com/app/300550 195 | { "name": "Dragonfall", "type": "game"} 196 | 197 | # https://store.steampowered.com/app/346940 198 | { "name": "SRHK", "type": "game"} 199 | 200 | # https://store.steampowered.com/app/963450 201 | { "name": "TheEternalCastle", "type": "game"} 202 | 203 | # https://store.steampowered.com/app/401360 204 | { "name": "TheAquaticAdventureOfTheLastHuman", "type": "game"} 205 | 206 | # https://store.steampowered.com/app/332200 207 | { "name": "AxiomVerge.bin.x86_64", "type": "game"} 208 | { "name": "AxiomVerge.bin.x86", "type": "game"} 209 | 210 | # https://store.steampowered.com/app/200900 211 | { "name": "CaveStory+", "type": "game"} 212 | 213 | # https://store.steampowered.com/app/247080 214 | { "name": "NecroDancer", "type": "game"} 215 | 216 | # https://store.steampowered.com/app/668980 217 | { "name": "ForsakenEx", "type": "game"} 218 | 219 | # https://store.steampowered.com/app/262260 220 | { "name": "jng_gold", "type": "game"} 221 | 222 | # https://store.steampowered.com/app/250760 223 | { "name": "ShovelKnight", "type": "game"} 224 | 225 | # https://store.steampowered.com/app/96200 226 | { "name": "steelstorm64", "type": "game"} 227 | 228 | # https://store.steampowered.com/app/250900 229 | { "name": "isaac.i386", "type": "game"} 230 | { "name": "isaac.x64", "type": "game"} 231 | 232 | # https://store.steampowered.com/app/105600 233 | { "name": "Terraria.bin.x86_64", "type": "game"} 234 | 235 | # https://store.steampowered.com/app/278930 236 | { "name": "GiganticArmy.x86", "type": "game"} 237 | 238 | # https://store.steampowered.com/app/236870 239 | { "name": "HitmanPro", "type": "game"} 240 | 241 | # https://store.steampowered.com/app/231160 242 | { "name": "TheSwapper.bin.x86_64", "type": "game"} 243 | { "name": "TheSwapper.bin.x86", "type": "game"} 244 | 245 | # https://store.steampowered.com/app/49520 246 | { "name": "Borderlands2", "type": "game"} 247 | 248 | # https://store.steampowered.com/app/261640 249 | { "name": "BorderlandsPreSequel", "type": "game"} 250 | 251 | # https://store.steampowered.com/app/286690 252 | # https://store.steampowered.com/app/287390 253 | { "name": "metro", "type": "game"} 254 | 255 | # https://store.steampowered.com/app/218620 256 | { "name": "payday2_release", "type": "game"} 257 | 258 | # https://store.steampowered.com/app/22180 259 | # https://store.steampowered.com/app/22120 260 | # https://store.steampowered.com/app/22140 261 | { "name": "penumbra", "type": "game"} 262 | { "name": "blackplague", "type": "game"} 263 | { "name": "requiem", "type": "game"} 264 | 265 | # https://store.steampowered.com/app/286220 266 | { "name": "pshd", "type": "game"} 267 | 268 | # https://store.steampowered.com/app/282140 269 | { "name": "Soma.bin.x86_64", "type": "game"} 270 | { "name": "Soma_NoSteam.bin.x86_64", "type": "game"} 271 | 272 | # https://store.steampowered.com/app/291650 273 | # https://store.steampowered.com/app/560130 274 | { "name": "PillarsOfEternity", "type": "game"} 275 | { "name": "PillarsOfEternityII", "type": "game"} 276 | 277 | # https://store.steampowered.com/app/368620 278 | { "name": "Timespinner", "type": "game"} 279 | 280 | # https://store.steampowered.com/app/200710 281 | { "name": "Torchlight2.bin.x86_64", "type": "game"} 282 | { "name": "Torchlight2.bin.x86", "type": "game"} 283 | 284 | # https://store.steampowered.com/app/272270 285 | { "name": "TidesOfNumenera", "type": "game"} 286 | 287 | # https://store.steampowered.com/app/35700 288 | # https://store.steampowered.com/app/35720 289 | # https://store.steampowered.com/app/319910 290 | { "name": "trine1_linux_32bit", "type": "game"} 291 | { "name": "trine2_linux_32bit", "type": "game"} 292 | { "name": "trine3_linux_64bit", "type": "game"} 293 | 294 | # https://store.steampowered.com/app/362960 295 | { "name": "Tyranny.x86_64", "type": "game"} 296 | { "name": "Tyranny.x86", "type": "game"} 297 | 298 | # https://store.steampowered.com/app/70300 299 | { "name": "VVVVVV", "type": "game"} 300 | 301 | # https://store.steampowered.com/app/20920 302 | { "name": "witcher2", "type": "game"} 303 | 304 | # https://store.steampowered.com/app/268500 305 | { "name": "XCOM2", "type": "game"} 306 | 307 | # https://store.steampowered.com/app/349690 308 | { "name": "ArmedSeven.x86", "type": "game"} 309 | 310 | # https://store.steampowered.com/app/312840 311 | { "name": "Fahrenheit", "type": "game"} 312 | 313 | # https://store.steampowered.com/app/230700 314 | { "name": "LaMulana.bin.x86", "type": "game"} 315 | 316 | # https://store.steampowered.com/app/404100 317 | { "name": "SteelStrider.x86", "type": "game"} 318 | 319 | # https://store.steampowered.com/app/976730 320 | { "name": "mcclauncher.exe", "type": "game"} 321 | { "name": "MCC-Win64-Shipping.exe", "type": "game"} 322 | 323 | # https://store.steampowered.com/app/548430 324 | { "name": "FSD-Win64-Shipping.exe", "type": "game"} 325 | 326 | # https://store.steampowered.com/app/555150 327 | { "name": "TheFirstTree.x86_64", "type": "game"} 328 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/blastem.rules: -------------------------------------------------------------------------------- 1 | # https://www.retrodev.com/blastem/ 2 | { "name": "blastem", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/cen64.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/n64dev/cen64 2 | { "name": "cen64", "type": "game"} 3 | { "name": "cen64-qt", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/descent.rules: -------------------------------------------------------------------------------- 1 | # dxx rebirth: https://www.dxx-rebirth.com/ 2 | { "name": "d1x-rebirth", "type": "game"} 3 | { "name": "d2x-rebirth", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/diablo.rules: -------------------------------------------------------------------------------- 1 | # devilutionx: https://github.com/diasurgical/devilutionX 2 | { "name": "devilutionx", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/dolphin-emu.rules: -------------------------------------------------------------------------------- 1 | #Dolphin emulator for Gamecube and Wii Games https://dolphin-emu.org/ 2 | { "name": "dolphin-emu", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/doom.rules: -------------------------------------------------------------------------------- 1 | # chocolate doom: https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom 2 | { "name": "chocolate-doom", "type": "game"} 3 | # zdoom: https://zdoom.org/index 4 | { "name": "zdoom", "type": "game"} 5 | { "name": "gzdoom", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/doom3.rules: -------------------------------------------------------------------------------- 1 | # dhewm3: https://dhewm3.org/ 2 | { "name": "dhewm3", "type": "game"} 3 | 4 | # rbdoom3bfg: https://github.com/RobertBeckebans/RBDOOM-3-BFG 5 | { "name": "rbdoom3bfg", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/doom64.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1148590 2 | { "name": "DOOM64_x64.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/dukenukem.rules: -------------------------------------------------------------------------------- 1 | # https://www.eduke32.com/ 2 | { "name": "eduke32", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/etlegacy.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/etlegacy/etlegacy 2 | { "name": "et", "type": "game"} 3 | { "name": "et.x86", "type": "game"} 4 | { "name": "etl", "type": "game"} 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/fsuae.rules: -------------------------------------------------------------------------------- 1 | # https://fs-uae.net/ 2 | { "name": "fs-uae", "type": "game"} 3 | { "name": "fs-uae-devel", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/guildwars2.rules: -------------------------------------------------------------------------------- 1 | # Guild Wars 2: https://www.guildwars2.com/ 2 | { "name": "GW2-64.exe", "type": "game"} 3 | { "name": "CoherentUI_Host.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/heroic-launcher.rules: -------------------------------------------------------------------------------- 1 | # Heroic Games Launcher: https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher 2 | { "name": "heroic", "type": "game-launcher" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/hexen2.rules: -------------------------------------------------------------------------------- 1 | # http://uhexen2.sourceforge.net/ 2 | { "name": "glhexen2", "type": "game"} 3 | { "name": "hexen2", "type": "game"} 4 | { "name": "glhwcl", "type": "game"} 5 | { "name": "hwcl", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/itch-launcher.rules: -------------------------------------------------------------------------------- 1 | # itch.io game launcher: https://itch.io/app 2 | { "name": "itch", "type": "game-launcher" } 3 | { "name": "butler", "type": "game-launcher" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/kerbal-space-program.rules: -------------------------------------------------------------------------------- 1 | #Native KSP 2 | { "name": "KSP.x86_64", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/madness-project-nexus.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/488860/MADNESS_Project_Nexus/ 2 | { "name": "Madness", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/mame.rules: -------------------------------------------------------------------------------- 1 | # https://www.mamedev.org/ 2 | { "name": "mame", "type": "game"} 3 | { "name": "sdlmame", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/marathon.rules: -------------------------------------------------------------------------------- 1 | # aleph one: https://alephone.lhowon.org/ 2 | { "name": "alephone", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/mednafen.rules: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Rules for mednafen emulator https://mednafen.github.io/ 3 | { "name": "mednafen", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/mesen.rules: -------------------------------------------------------------------------------- 1 | # https://www.mesen.ca/ 2 | { "name": "mesen", "type": "game"} 3 | { "name": "mesen-git", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/minetest.rules: -------------------------------------------------------------------------------- 1 | # http://www.minetest.net/ 2 | { "name": "minetest", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/osu-lazer.rules: -------------------------------------------------------------------------------- 1 | #Osu!lazer is a Rhythm game https://github.com/ppy/osu 2 | { "name": "osu!", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/ppsspp.rules: -------------------------------------------------------------------------------- 1 | # PPSSPP, PSP emulator 2 | { "name": "PPSSPPSDL", "type": "game"} 3 | { "name": "PPSSPPHeadless", "type": "game"} 4 | { "name": "PPSSPPQt", "type": "game"} 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/projectzomboid.rules: -------------------------------------------------------------------------------- 1 | # Project Zomboid - https://store.steampowered.com/app/108600/Project_Zomboid/ 2 | { "name": "projectzomboid.sh", "type": "game" } 3 | { "name": "ProjectZomboid64", "type": "game" } 4 | { "name": "ProjectZomboid32", "type": "game" } 5 | # Proton / Wine 6 | { "name": "ProjectZomboid64.exe", "type": "game" } 7 | { "name": "ProjectZomboid32.exe", "type": "game" } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/quake.rules: -------------------------------------------------------------------------------- 1 | # tyrquake: https://disenchant.net/tyrquake/ 2 | { "name": "tyr-quake", "type": "game"} 3 | { "name": "tyr-glquake", "type": "game"} 4 | { "name": "tyr-qwcl", "type": "game"} 5 | { "name": "tyr-glqwcl", "type": "game"} 6 | 7 | # vkquake: https://github.com/Novum/vkQuake 8 | { "name": "vkquake", "type": "game"} 9 | 10 | # quakespasm: http://quakespasm.sourceforge.net/ 11 | { "name": "quakespasm", "type": "game"} 12 | { "name": "quakespasm-svn", "type": "game"} 13 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/quake2.rules: -------------------------------------------------------------------------------- 1 | # yamagi-quake2: https://www.yamagi.org/quake2/ 2 | # vkquake2: https://github.com/kondrak/vkQuake2 3 | { "name": "quake2", "type": "game"} 4 | { "name": "yamagi-quake2", "type": "game"} 5 | { "name": "yamagi-quake2-git", "type": "game"} 6 | { "name": "vkquake2", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/quake3.rules: -------------------------------------------------------------------------------- 1 | # ioquake3: https://ioquake3.org/ 2 | { "name": "quake3", "type": "game"} 3 | { "name": "ioquake3", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/rct2.rules: -------------------------------------------------------------------------------- 1 | # openrct2: https://openrct2.org/ 2 | { "name": "openrct2", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/rimworld.rules: -------------------------------------------------------------------------------- 1 | # RimWorld - https://rimworldgame.com/ 2 | { "name": "RimWorldLinux", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/rott.rules: -------------------------------------------------------------------------------- 1 | # rottexptr: https://github.com/LTCHIPS/rottexpr 2 | { "name": "rott", "type": "game"} 3 | { "name": "rottexpr", "type": "game"} 4 | 5 | # rott: http://icculus.org/rott/ 6 | { "name": "rott-registered", "type": "game"} 7 | { "name": "rott-shareware", "type": "game"} 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/rpcs3.rules: -------------------------------------------------------------------------------- 1 | # Play Station 3 emulator: https://rpcs3.net 2 | { "name": "rpcs3", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/rtcw.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/iortcw/iortcw 2 | { "name": "iowolfmp.x86_64", "type": "game"} 3 | { "name": "iowolfsp.x86_64", "type": "game"} 4 | { "name": "iortcw-mp", "type": "game"} 5 | { "name": "iortcw-sp", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/skyrim.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/489830 2 | { "name": "TESV.exe", "type": "game"} 3 | { "name": "SkyrimSE.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/starcraft2.rules: -------------------------------------------------------------------------------- 1 | # StarCraft2 - https://starcraft2.com/en-us/ 2 | { "name": "SC2_x64.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/stellaris.rules: -------------------------------------------------------------------------------- 1 | # Stellaris - https://www.stellaris.com/ 2 | { "name": "stellaris", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/supertuxkart.rules: -------------------------------------------------------------------------------- 1 | #SuperTuxKart is a 3D open-source arcade racer with a variety characters, tracks, and modes to play https://supertuxkart.net/ 2 | { "name": "supertuxkart", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/syndicate.rules: -------------------------------------------------------------------------------- 1 | # freesynd: https://freesynd.sourceforge.io/ 2 | { "name": "freesynd", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/torchlight.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/41500 2 | { "name": "Torchlight.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/200710 5 | { "name": "Torchlight2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1030210 8 | { "name": "Frontiers.exe", "type": "game"} 9 | { "name": "Frontiers-Win64-Shipping.exe", "type": "game"} 10 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/universe-sandbox-2.rules: -------------------------------------------------------------------------------- 1 | # Universe Sandbox 2 2 | {"name":"Universe", "type":"game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/unreal.rules: -------------------------------------------------------------------------------- 1 | # www.oldunreal.com 2 | # unreal 98 3 | { "name": "UnrealLinux.bin", "type": "game"} 4 | 5 | # unreal tournament 99: game of the year - ut99 - utgoty - ut469 6 | { "name": "ut-bin", "type": "game"} 7 | { "name": "ut-bin-x86", "type": "game"} 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/warframe.rules: -------------------------------------------------------------------------------- 1 | # Warframe (via Steam Proton): https://store.steampowered.com/app/230410/warframe 2 | { "name": "Warframe.x64.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/watchdogs1.rules: -------------------------------------------------------------------------------- 1 | #Watch Dogs 1 via UPlay 2 | { "name": "Watch_Dogs.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/watchdogs2.rules: -------------------------------------------------------------------------------- 1 | #Watch Dogs 2 via UPlay 2 | { "name": "WatchDogs2.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/wolfenstein3d.rules: -------------------------------------------------------------------------------- 1 | # ecwolf: http://maniacsvault.net/ecwolf/ 2 | { "name": "ecwolf", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/xonotic.rules: -------------------------------------------------------------------------------- 1 | # Xonotic https://www.xonotic.org/ 2 | { "name": "xonotic-glx", "type": "game"} 3 | { "name": "xonotic-sdl", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/games/yuzu.rules: -------------------------------------------------------------------------------- 1 | #Yuzu Emulator for Switch games https://yuzu-emu.org/ 2 | { "name": "yuzu", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/gerbera.rules: -------------------------------------------------------------------------------- 1 | { "name": "gerbera", "type": "BG_CPUIO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/git-annex.rules: -------------------------------------------------------------------------------- 1 | { "name": "git-annex", "type": "BG_CPUIO" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/gnur.rules: -------------------------------------------------------------------------------- 1 | # A rule for GNU R, a language for statistical computing and graphics 2 | { "name": "R", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/handbrake.rules: -------------------------------------------------------------------------------- 1 | # https://handbrake.fr/ 2 | { "name": "ghb", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/higan.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/higan-emu/higan 2 | { "name": "higan", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/htop.rules: -------------------------------------------------------------------------------- 1 | # htop process browser: https://hisham.hm/htop/ 2 | { "name": "htop", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-editors/gimp.rules: -------------------------------------------------------------------------------- 1 | # GNU Image Manipulation Program: https://www.gimp.org/ 2 | {"name":"gimp", "type":"image-editor"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-editors/inkscape.rules: -------------------------------------------------------------------------------- 1 | # https://inkscape.org 2 | {"name":"inkscape", "type":"image-editor"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-editors/krita.rules: -------------------------------------------------------------------------------- 1 | # https://krita.org 2 | {"name":"krita", "type":"image-editor"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/eog.rules: -------------------------------------------------------------------------------- 1 | # GNOME image viewer: https://wiki.gnome.org/Apps/EyeOfGnome/ 2 | { "name": "eog", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/feh.rules: -------------------------------------------------------------------------------- 1 | # https://feh.finalrewind.org 2 | { "name": "feh", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/gpicview.rules: -------------------------------------------------------------------------------- 1 | # good old image viewer 2 | { "name": "gpicview", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/mirage.rules: -------------------------------------------------------------------------------- 1 | # http://mirageiv.sourceforge.net 2 | { "name": "mirage", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/nomacs.rules: -------------------------------------------------------------------------------- 1 | # Nomacs - https://nomacs.org/ 2 | { "name": "nomacs", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/nsxiv.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/nsxiv/nsxiv 2 | { "name": "nsxiv", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/qimgv.rules: -------------------------------------------------------------------------------- 1 | # Image viewer: https://github.com/easymodo/qimgv/ 2 | { "name": "qimgv", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/shotwell.rules: -------------------------------------------------------------------------------- 1 | # A photo manager for GNOME 3: https://wiki.gnome.org/Apps/Shotwell 2 | { "name": "shotwell", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/image-viewers/sxiv.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/muennich/sxiv 2 | { "name": "sxiv", "type": "image-viewer" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/kbfsfuse.rules: -------------------------------------------------------------------------------- 1 | # Keybase Filesystem Fuse: https://github.com/keybase/client/tree/master/go/kbfs/kbfsfuse 2 | {"name": "kbfsfuse", "type": "BG_CPUIO"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/kget.rules: -------------------------------------------------------------------------------- 1 | # Download manager: https://www.kde.org/applications/internet/kget/ 2 | { "name": "kget", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/kupfer.rules: -------------------------------------------------------------------------------- 1 | # kupfer launcher: https://kupferlauncher.github.io/ 2 | { "name": "kupfer", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/mednaffe.rules: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Rules for mednaffe: A front-end (GUI) for mednafen emulator 3 | # https://github.com/AmatCoder/mednaffe 4 | { "name": "mednaffe", "type": "BG_CPUIO" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/melt.rules: -------------------------------------------------------------------------------- 1 | # MLT Multimedia Framework https://www.mltframework.org/ 2 | { "name": "melt", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/ario.rules: -------------------------------------------------------------------------------- 1 | # Music player: http://ario-player.sourceforge.net/ 2 | { "name": "ario", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/audacious.rules: -------------------------------------------------------------------------------- 1 | # Music player: http://audacious-media-player.org/ 2 | { "name": "audacious", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/clementine.rules: -------------------------------------------------------------------------------- 1 | # Music player: https://www.clementine-player.org 2 | { "name": "clementine", "type": "music-player" } 3 | { "name": "clementine-tagreader", "type": "music-player" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/deadbeef.rules: -------------------------------------------------------------------------------- 1 | # Music player: http://deadbeef.sourceforge.net/ 2 | { "name": "deadbeef-gtkui", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/moc.rules: -------------------------------------------------------------------------------- 1 | # Music on console: https://moc.daper.net/ 2 | { "name": "moc", "type": "music-player" } 3 | { "name": "mocp", "type": "music-player" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/mpd.rules: -------------------------------------------------------------------------------- 1 | # Music player: https://www.musicpd.org/ 2 | { "name": "mpd", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/ncmpcpp.rules: -------------------------------------------------------------------------------- 1 | # ncmcpp - command line music player: https://rybczak.net/ncmpcpp/ 2 | { "name": "ncmcpp", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/nuclear.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/nukeop/nuclear 2 | { "name": "nuclear", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/qmmp.rules: -------------------------------------------------------------------------------- 1 | # Music player: http://qmmp.ylsoftware.com/ 2 | { "name": "qmmp", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/rhythmbox.rules: -------------------------------------------------------------------------------- 1 | # Music player: https://wiki.gnome.org/Apps/Rhythmbox 2 | { "name": "rhythmbox", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/music-players/spotify.rules: -------------------------------------------------------------------------------- 1 | # Spotify Ltd. is a music streaming platform: https://www.spotify.com/download/linux/ 2 | { "name": "spotify", "type": "music-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/node.rules: -------------------------------------------------------------------------------- 1 | #Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. https://nodejs.org 2 | {"name": "node", "type": "BG_CPUIO"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/nvdock.rules: -------------------------------------------------------------------------------- 1 | # Nvidia Dock Applet: https://aur.archlinux.org/packages/nvdock/ 2 | { "name": "nvdock", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/p2p-clients/amule.rules: -------------------------------------------------------------------------------- 1 | # amule: https://www.amule.org/ 2 | { "name": "amule", "type": "p2p-client" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/p2p-clients/soulseekqt.rules: -------------------------------------------------------------------------------- 1 | # Soulseek client: http://www.soulseekqt.net 2 | { "name": "soulseekqt", "type":"p2p-client" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/package-managers/archlinux.rules: -------------------------------------------------------------------------------- 1 | # Some rules for Arch Linux specific tools 2 | { "name": "mkinitcpio", "type": "service" } 3 | { "name": "makepkg", "type": "package-manager" } 4 | { "name": "pacman", "type": "package-manager" } 5 | { "name": "pamac", "type": "package-manager" } 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/package-managers/paru.rules: -------------------------------------------------------------------------------- 1 | # paru - Feature packed AUR helper 2 | { "name": "paru", "type": "package-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/package-managers/yay.rules: -------------------------------------------------------------------------------- 1 | # yay - Yet another Yogurt 2 | { "name": "yay", "type": "package-manager" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/psensor.rules: -------------------------------------------------------------------------------- 1 | # psensor - graphical hardware temperature monitor: https://wpitchoune.net/psensor/ 2 | { "name": "psensor", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/rambox.rules: -------------------------------------------------------------------------------- 1 | #Rambox messaging app https://rambox.pro 2 | {"name": "rambox", "type": "chat"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/recoll.rules: -------------------------------------------------------------------------------- 1 | # Recoll Desktop search tool http://www.lesbonscomptes.com/recoll/ 2 | { "name": "recollindex", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/redshift.rules: -------------------------------------------------------------------------------- 1 | # Sets colour temperature of screen according to time of day 2 | # http://jonls.dk/redshift/ 3 | 4 | { "name": "redshift", "type": "BG_CPUIO" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/remote-desktops/anydesk.rules: -------------------------------------------------------------------------------- 1 | # Anydesk: https://anydesk.com/ 2 | { "name": "anydesk", "type": "remote-desktop" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/remote-desktops/remmina.rules: -------------------------------------------------------------------------------- 1 | # https://remmina.org 2 | { "name": "remmina", "type": "remote-desktop" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/remote-desktops/teamviewer.rules: -------------------------------------------------------------------------------- 1 | # https://www.teamviewer.com 2 | { "name": "TeamViewer", "type": "remote-desktop" } 3 | { "name": "teamviewerd", "type": "remote-desktop" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/remote-desktops/vnc-viewer.rules: -------------------------------------------------------------------------------- 1 | # https://tigervnc.org/ 2 | { "name": "vncviewer", "type": "remote-desktop" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/restic.rules: -------------------------------------------------------------------------------- 1 | # Restic https://restic.net 2 | {"name": "restic", "type": "BG_CPUIO"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/rmlint.rules: -------------------------------------------------------------------------------- 1 | # Tools for deduping file systems: https://github.com/sahib/rmlint 2 | { "name": "rmlint", "type": "BG_CPUIO" } 3 | 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/sabnzbd.rules: -------------------------------------------------------------------------------- 1 | { "name": "SABnzbd.py", "type": "BG_CPUIO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/screenshotters/flameshot.rules: -------------------------------------------------------------------------------- 1 | # Screenshot utility 2 | { "name": "flameshot", "type":"screenshotter" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/screenshotters/shutter.rules: -------------------------------------------------------------------------------- 1 | # http://shutter-project.org 2 | { "name": "shutter", "type": "screenshotter" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/screenshotters/xfce4-screenshooter.rules: -------------------------------------------------------------------------------- 1 | 2 | {"name":"xfce4-screenshooter", "type":"screenshotter"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/apache2.rules: -------------------------------------------------------------------------------- 1 | { "name": "apache2", "type": "server" } 2 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/blocky.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/0xERR0R/blocky 2 | { "name": "blocky", "type": "server" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/dnscrypt-proxy.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/DNSCrypt/dnscrypt-proxy 2 | { "name": "dnscrypt-proxy", "type": "server" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/dnsmasq.rules: -------------------------------------------------------------------------------- 1 | # dnsmasq DNS cache system 2 | { "name": "dnsmasq", "type": "server" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/php-cgi.rules: -------------------------------------------------------------------------------- 1 | { "name": "php-cgi7.0", "type": "server" } 2 | { "name": "php-cgi7.1", "type": "server" } 3 | { "name": "php-cgi7.2", "type": "server" } 4 | { "name": "php-cgi7.3", "type": "server" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/servers/unbound.rules: -------------------------------------------------------------------------------- 1 | # https://en.wikipedia.org/wiki/Unbound_(DNS_server) 2 | { "name": "unbound", "type": "server" } 3 | { "name": "unbound-checkconf", "type": "server" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/blueman-blueberry.rules: -------------------------------------------------------------------------------- 1 | # Bluetooth tools: https://github.com/blueman-project/blueman 2 | { "name": "blueman-applet", "type": "service" } 3 | { "name": "blueberry-tray", "type": "service" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/bluetoothd.rules: -------------------------------------------------------------------------------- 1 | # http://linux.die.net/man/8/bluetoothd 2 | { "name": "bluetoothd", "type": "service" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/cups.rules: -------------------------------------------------------------------------------- 1 | # http://www.cups.org/ 2 | { "name": "cups", "type": "service" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/freenet.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/freenet/fred 2 | 3 | {"name":"java", "cmdlines":["freenet.node.NodeStarter"], "type":"service,CPU_U,IO_L"} 4 | 5 | # NOTE: freenet is not supposed to be reniced 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/gamemoded.rules: -------------------------------------------------------------------------------- 1 | # http://github.com/FeralInteractive/gamemode 2 | { "name": "gamemoded", "type": "service" } 3 | 4 | # TODO might be best to create a new type for this 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/services/yacy.rules: -------------------------------------------------------------------------------- 1 | # https://yacy.net/ - web crawler 2 | {"name":"yacy", "type":"service"} 3 | {"name":"java", "cmdlines":["net.yacy.yacy"], "type":"service"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/smartd.rules: -------------------------------------------------------------------------------- 1 | # https://www.smartmontools.org/ 2 | { "name": "smartd", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/ssh.rules: -------------------------------------------------------------------------------- 1 | # ssh 2 | { "name": "ssh-agent", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/alacritty.rules: -------------------------------------------------------------------------------- 1 | # alacritty terminal (https://github.com/alacritty/alacritty) 2 | { "name": "alacritty", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/guake.rules: -------------------------------------------------------------------------------- 1 | # Guake dropdown terminal: https://github.com/Guake/guake 2 | { "name": "guake", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/kitty.rules: -------------------------------------------------------------------------------- 1 | # kitty: https://sw.kovidgoyal.net/kitty/ 2 | { "name": "kitty", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/konsole.rules: -------------------------------------------------------------------------------- 1 | # Konsole 2 | { "name": "konsole", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/st.rules: -------------------------------------------------------------------------------- 1 | # simple terminal (https://st.suckless.org/) 2 | { "name": "st", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/tilix.rules: -------------------------------------------------------------------------------- 1 | # Tilix terminal: https://gnunn1.github.io/tilix-web/ 2 | { "name": "tilix", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/tmux.rules: -------------------------------------------------------------------------------- 1 | # tmux: https://github.com/tmux/tmux/wiki 2 | { "name": "tmux", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/urxvt.rules: -------------------------------------------------------------------------------- 1 | # http://cvs.schmorp.de/rxvt-unicode/ 2 | { "name": "urxvt", "type": "terminal" } 3 | { "name": "urxvtd", "type": "terminal" } 4 | { "name": "urxvtc", "type": "terminal" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/wezterm.rules: -------------------------------------------------------------------------------- 1 | # WezTerm terminal (https://wezfurlong.org/wezterm/) 2 | { "name": "wezterm-gui", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/xterm.rules: -------------------------------------------------------------------------------- 1 | # http://invisible-island.net/xterm/ 2 | { "name": "xterm", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/terminals/yakuake.rules: -------------------------------------------------------------------------------- 1 | # Yakuake dropdown terminal: https://apps.kde.org/yakuake/ 2 | { "name": "yakuake", "type": "terminal" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/thermald.rules: -------------------------------------------------------------------------------- 1 | # Thermal monitoring and controlling daemon: https://wiki.debian.org/thermald 2 | { "name": "thermald", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/tor.rules: -------------------------------------------------------------------------------- 1 | # tor: https://www.torproject.org/ 2 | { "name": "tor", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/deluge.rules: -------------------------------------------------------------------------------- 1 | # http://deluge-torrent.org 2 | { "name": "deluged", "type": "torrent" } 3 | { "name": "deluge", "type": "torrent" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/ktorrent.rules: -------------------------------------------------------------------------------- 1 | # Torrent client: https://www.kde.org/applications/internet/ktorrent/ 2 | { "name": "ktorrent", "type": "torrent" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/qBittorrent.rules: -------------------------------------------------------------------------------- 1 | # QT bittorrent client 2 | { "name": "qbittorrent", "type": "torrent" } 3 | { "name": "qbittorrent-nox", "type": "torrent" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/rtorrent.rules: -------------------------------------------------------------------------------- 1 | # rtorrent: https://github.com/rakshasa/rtorrent 2 | { "name": "rtorrent", "type": "torrent" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/tixati.rules: -------------------------------------------------------------------------------- 1 | # https://www.tixati.com - Torrent-client Tixati 2 | { "name": "tixati", "type": "torrent" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/transmission.rules: -------------------------------------------------------------------------------- 1 | # Torrent client: https://www.transmissionbt.com 2 | { "name": "transgui", "type": "torrent" } 3 | { "name": "transmission-cli", "type": "torrent" } 4 | { "name": "transmission-daemon", "type": "torrent" } 5 | { "name": "transmission-gtk", "type": "torrent" } 6 | { "name": "transmission-qt", "type": "torrent" } 7 | { "name": "transmission-remote", "type": "torrent" } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/torrents/webtorrent.rules: -------------------------------------------------------------------------------- 1 | # WebTorrent Desktop: https://webtorrent.io/desktop/ 2 | { "name": "WebTorrent", "type": "torrent" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/ue4.rules: -------------------------------------------------------------------------------- 1 | # unreal engine 4: https://www.unrealengine.com 2 | { "name": "UE4Editor", "type": "BG_CPUIO" } 3 | { "name": "ShaderCompileWorker", "type": "BG_CPUIO" } 4 | { "name": "UnrealLightmass", "type": "BG_CPUIO" } 5 | { "name": "UnrealPak", "type": "BG_CPUIO" } 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/unison.rules: -------------------------------------------------------------------------------- 1 | #unison file synchronization 2 | { "name": "unison", "type": "BG_CPUIO" } -------------------------------------------------------------------------------- /ananicy.d/00-default/uptimed.rules: -------------------------------------------------------------------------------- 1 | # Uptime statistics gathering daemon: https://github.com/rpodgorny/uptimed 2 | { "name": "uptimed", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/SVP.rules: -------------------------------------------------------------------------------- 1 | # SmoothVideo Project, https://www.svp-team.com/wiki/Main_Page 2 | { "name": "SVPManager", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/acestream.rules: -------------------------------------------------------------------------------- 1 | # http://acestream.org 2 | { "name": "acestreamengine", "type": "video-player" } 3 | { "name": "acestream-launcher", "type": "video-player" } 4 | { "name": "acestream-player", "type": "video-player" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/celluloid.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/celluloid-player/celluloid 2 | { "name": "celluloid", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/jellyfin-media-player.rules: -------------------------------------------------------------------------------- 1 | # Jellyfin Media Player: https://github.com/jellyfin/jellyfin-media-player 2 | { "name": "jellyfinmediaplayer", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/mplayer.rules: -------------------------------------------------------------------------------- 1 | # Video player: http://www.mplayerhq.hu 2 | { "name": "mplayer", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/mpv.rules: -------------------------------------------------------------------------------- 1 | # Video player: https://mpv.io/ 2 | { "name": "mpv", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/plex.rules: -------------------------------------------------------------------------------- 1 | # Video player: https://github.com/plexinc/plex-media-player 2 | { "name": "plexmediaplayer", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/smplayer.rules: -------------------------------------------------------------------------------- 1 | # Video player: http://smplayer.sourceforge.net/ 2 | { "name": "smplayer", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/sopcast.rules: -------------------------------------------------------------------------------- 1 | # http://www.sopcast.com 2 | { "name": "sopcast-player", "type": "video-player" } 3 | { "name": "sopcast-player.py", "type": "video-player" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/stremio.rules: -------------------------------------------------------------------------------- 1 | #Stremio is a modern media center that gives you the freedom to watch everything you want. https://www.stremio.com/ 2 | { "name": "stremio", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/totem.rules: -------------------------------------------------------------------------------- 1 | # Video player: https://wiki.gnome.org/action/show/Apps/Videos 2 | { "name": "totem", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/vlc.rules: -------------------------------------------------------------------------------- 1 | # VLC media player: https://www.videolan.org/vlc 2 | { "name": "vlc", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/video-players/youtube-music.rules: -------------------------------------------------------------------------------- 1 | # YouTube Music Desktop App: https://github.com/th-ch/youtube-music 2 | { "name": "youtube-music", "type": "video-player" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/brave.rules: -------------------------------------------------------------------------------- 1 | # Brave Web Browser: https://brave.com/ 2 | { "name": "brave", "type": "web-browser" } 3 | { "name": "brave-browser", "type": "web-browser" } 4 | { "name": "brave-sandbox", "type": "web-browser" } 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/chromium-based.rules: -------------------------------------------------------------------------------- 1 | # Chromium Web Browser: https://www.chromium.org 2 | { "name": "chromium", "type": "web-browser" } 3 | { "name": "chromium-snapshot", "type": "web-browser" } 4 | { "name": "chromium-snapshot-bin", "type": "web-browser" } 5 | 6 | # Google Chrome: https://chrome.google.com 7 | { "name": "chrome", "type": "web-browser" } 8 | { "name": "nacl_helper", "type": "web-browser" } 9 | { "name": "chrome-sandbox", "type": "web-browser" } 10 | { "name": "google-chrome-dev", "type": "web-browser" } 11 | { "name": "google-chrome-unstable", "type": "web-browser" } 12 | 13 | # Thorium: https://github.com/Alex313031/Thorium 14 | { "name": "chrome_crashpad_handler", "type": "web-browser" } 15 | { "name": "thorium", "type": "web-browser" } 16 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/firefox-based-browsers.rules: -------------------------------------------------------------------------------- 1 | # Icecat 2 | { "name": "icecat", "type":"web-browser" } 3 | 4 | # Iceweasel 5 | { "name": "ice-weasel", "type":"web-browser" } 6 | 7 | # LibreWolf (https://librewolf-community.gitlab.io/) 8 | { "name": "librewolf", "type":"web-browser" } 9 | { "name": "librewolf-bin", "type":"web-browser" } 10 | { "name": "librewolf-nightly", "type":"web-browser" } 11 | 12 | # FireDragon (https://gitlab.com/dr460nf1r3/settings) 13 | { "name": "firedragon", "type":"web-browser" } 14 | { "name": "firedragon-bin", "type":"web-browser" } 15 | 16 | # Firefox (https://www.mozilla.org/firefox/) 17 | { "name": "firefox", "type":"web-browser" } 18 | { "name": "firefox-bin", "type":"web-browser" } 19 | { "name": "firefox-esr", "type":"web-browser" } 20 | 21 | # Firefox Developer Edition (https://www.mozilla.org/en-US/firefox/developer/) 22 | { "name": "firefox-developer-edition", "type":"web-browser" } 23 | 24 | # Firefox Nightly (https://wiki.mozilla.org/Nightly) 25 | { "name": "firefox-nightly", "type":"web-browser" } 26 | 27 | # Tor Browser 28 | { "name": "firefox.real", "type":"web-browser" } 29 | 30 | # Waterfox (https://www.waterfox.net/) 31 | { "name": "waterfox-g4", "type":"web-browser" } 32 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/qtwebengine.rules: -------------------------------------------------------------------------------- 1 | # Video player: https://doc.qt.io/qt-5.11/qtwebengine-index.html 2 | { "name": "QtWebEngineProcess", "type": "web-browser" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/surf.rules: -------------------------------------------------------------------------------- 1 | # https://surf.suckless.org/ 2 | { "name": "surf", "type": "web-browser" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/web-browsers/vivaldi.rules: -------------------------------------------------------------------------------- 1 | # Vivaldi web browser. https://vivaldi.com 2 | {"name": "vivaldi-bin", "type": "web-browser"} 3 | # vivaldi-sandbox process gets -8 nice level by default. 4 | # {"name": "vivaldi-sandbox"} 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wget.rules: -------------------------------------------------------------------------------- 1 | # https://www.gnu.org/software/wget 2 | { "name": "wget", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/Battlerite.rules: -------------------------------------------------------------------------------- 1 | # https://www.battlerite.com 2 | { "name": "Battlerite.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/README: -------------------------------------------------------------------------------- 1 | 2 | This folder is depricated. All applications from this folder need to be moved into their respective folder. 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/Remnant.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/617290 2 | { "name": "Remnant-Win64-Shipping.exe", "type": "game"} 3 | { "name": "Remnant.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/RocketLeague.rules: -------------------------------------------------------------------------------- 1 | #Rocket League via Proton (Note: The 'ex' is intentional) 2 | { "name": "RocketLeague.ex", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/Steam.exe.rules: -------------------------------------------------------------------------------- 1 | ## Rules for Steam on Wine 2 | # Steam client 3 | { "name": "Steam.exe", "type": "game-launcher" } 4 | 5 | # Steam integrated web browser 6 | { "name": "steamwebhelper.exe", "type": "BG_CPUIO" } 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/TERA.exe.rules: -------------------------------------------------------------------------------- 1 | # TERA Online MMORPG Game 2 | { "name": "TERA.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/TheOuterWorlds.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/578650 2 | { "name": "Indiana-Win64-Shipping.exe", "type": "game"} 3 | { "name": "TheOuterWorlds.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/alienvspredator.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/3730/Aliens_versus_Predator_Classic_2000/ 2 | { "name": "AvP_Classic.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/10680/Aliens_vs_Predator/ 5 | { "name": "AvP.exe", "type": "game"} 6 | { "name": "AvP_DX11.exe", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/anachronox.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/242940/Anachronox/ 2 | { "name": "anox.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/assassinscreed.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/15100 2 | { "name": "AssassinsCreed_Dx9.exe", "type": "game"} 3 | { "name": "AssassinsCreed_Dx10.exe", "type": "game"} 4 | 5 | # https://store.steampowered.com/app/33230 6 | { "name": "AssassinsCreedIIGame.exe", "type": "game"} 7 | 8 | # https://store.steampowered.com/app/48190 9 | { "name": "ACBSP.exe", "type": "game"} 10 | { "name": "ACBMP.exe", "type": "game"} 11 | 12 | # https://store.steampowered.com/app/201870 13 | { "name": "ACRMP.exe", "type": "game"} 14 | { "name": "ACRPR.exe", "type": "game"} 15 | { "name": "ACRSP.exe", "type": "game"} 16 | 17 | # https://store.steampowered.com/app/911400 18 | { "name": "AC3SP.exe", "type": "game"} 19 | { "name": "AC3MP.exe", "type": "game"} 20 | 21 | # https://store.steampowered.com/app/242050 22 | { "name": "AC4BFMP.exe", "type": "game"} 23 | { "name": "AC4BFSP.exe", "type": "game"} 24 | 25 | # https://store.steampowered.com/app/311560 26 | { "name": "ACC.exe", "type": "game"} 27 | 28 | # https://store.steampowered.com/app/289650 29 | { "name": "ACU.exe", "type": "game"} 30 | 31 | # https://store.steampowered.com/app/368500 32 | { "name": "ACS.exe", "type": "game"} 33 | 34 | # https://store.steampowered.com/app/582160 35 | { "name": "ACOrigins.exe", "type": "game"} 36 | 37 | # https://store.steampowered.com/app/812140 38 | { "name": "ACOdyssey.exe", "type": "game"} 39 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/batman.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/208650/Batman_Arkham_Knight/ 2 | { "name": "BatmanAK.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/209000/Batman_Arkham_Origins/ 5 | { "name": "BatmanOriginsOnline.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/200260/Batman_Arkham_City__Game_of_the_Year_Edition/ 8 | { "name": "BatmanAC.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/35140/Batman_Arkham_Asylum_Game_of_the_Year_Edition/ 11 | { "name": "ShippingPC-BmGame.exe", "type": "game"} 12 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/battle.net.rules: -------------------------------------------------------------------------------- 1 | # Battle.net - https://www.blizzard.com/apps/battle.net/desktop 2 | {"name":"Battle.net.exe", "type":"game-launcher"} 3 | {"name":"Agent.exe", "type":"game-launcher"} 4 | 5 | # Heroes of The Storm - https://heroesofthestorm.com/ 6 | {"name":"HeroesOfTheStor", "type":"game"} 7 | 8 | # Overwatch - https://playoverwatch.com/ 9 | {"name":"Overwatch.exe", "type":"game"} 10 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/beyondtwosouls.rules: -------------------------------------------------------------------------------- 1 | #Beyond Two Souls via Proton 2 | { "name": "BeyondTwoSouls_", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/bioshock.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/7670 2 | { "name": "Bioshock.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/409710 5 | { "name": "BioshockHD.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/8850 8 | { "name": "Bioshock2.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/409720 11 | { "name": "Bioshock2HD.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/8870 14 | { "name": "BioShockInfinite.exe", "type": "game"} 15 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/bloodrayne.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/3810/BloodRayne_Legacy/ 2 | { "name": "rayne.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/3820/BloodRayne_2_Legacy/ 5 | { "name": "br2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/281220/BloodRayne_Betrayal/ 8 | { "name": "bloodrayne.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/1373510/BloodRayne_Terminal_Cut/ 11 | { "name": "rayne1.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/1373550/BloodRayne_2_Terminal_Cut/ 14 | { "name": "rayne2.exe", "type": "game"} 15 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/bloodstained.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/692850 2 | { "name": "BloodstainedRotN.exe", "type": "game"} 3 | { "name": "BloodstainedRotN-Win64-Shipping.exe", "type": "game"} 4 | 5 | # https://store.steampowered.com/app/838310 6 | { "name": "COTM.exe", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/borderlands.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/397540/Borderlands_3/ 2 | { "name": "Borderlands3.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/49520/Borderlands_2/ 5 | { "name": "Borderlands2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/261640/Borderlands_The_PreSequel/ 8 | { "name": "BorderlandsPreSequel.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/8980/Borderlands_Game_of_the_Year/ 11 | { "name": "Borderlands.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/729040/Borderlands_Game_of_the_Year_Enhanced/ 14 | { "name": "BorderlandsGOTY.exe", "type": "game"} 15 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/callofcthulhu.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/22340 2 | { "name": "CoCMainWin32.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/399810 5 | { "name": "CallOfCthulhu.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/251390 8 | { "name": "Cthulhu.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/castlevania.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/239250/Castlevania_Lords_of_Shadow_2/ 2 | { "name": "CLOS2.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/234080/Castlevania_Lords_of_Shadow__Ultimate_Edition/ 5 | { "name": "CastlevaniaLoSUE.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/282530/Castlevania_Lords_of_Shadow__Mirror_of_Fate_HD/ 8 | { "name": "CMOF.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/ccremastered.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1213210/Command__Conquer_Remastered_Collection/ 2 | { "name": "ClientG.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/chaser.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/39670 2 | { "name": "Chaser.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/commongameexe.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/891170/The_Witch__The_66_Mushrooms/ 2 | { "name": "player.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/1042670/Orangeblood/ 5 | { "name": "Game.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1018010/Castlevania_Anniversary_Collection/ 8 | # https://store.steampowered.com/app/1257360/Bloodstained_Curse_of_the_Moon_2/ 9 | { "name": "game.exe", "type": "game"} 10 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/condemned.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/4720/Condemned_Criminal_Origins/ 2 | { "name": "Condemned.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/control.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/870780/Control_Ultimate_Edition/ 2 | { "name": "Control.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/cyberpunk2077.rules: -------------------------------------------------------------------------------- 1 | # Cyberpunk 2077 - https://www.cyberpunk.net 2 | # https://store.steampowered.com/app/1091500/Cyberpunk_2077 3 | # https://www.gog.com/game/cyberpunk_2077 4 | # https://www.epicgames.com/store/product/cyberpunk-2077 5 | { "name": "Redprelauncher", "type": "game-launcher"} 6 | { "name": "Cyberpunk2077.exe", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/darksouls.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/570940 2 | { "name": "DarkSoulsRemastered.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/236430 5 | { "name": "DarkSoulsII.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/374320 8 | { "name": "DarkSoulsIII.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/deadspace.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/17470 2 | { "name": "Dead Space.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/47780 5 | { "name": "deadspace2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1238060 8 | { "name": "deadspace3.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/detroitbecomehuman.rules: -------------------------------------------------------------------------------- 1 | #Detroit Become Human via Proton https://store.steampowered.com/app/1222140/Detroit_Become_Human/ 2 | { "name": "DetroitBecomeHu", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/deusex.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/6910 2 | { "name": "DeusEx.exe", "type": "game"} 3 | 4 | # https://www.kentie.net/article/dxguide/ 5 | { "name": "deusex.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/397550 8 | { "name": "Revision.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/337000 11 | { "name": "DXMD.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/238010 14 | { "name": "DXHRDC.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/6920 17 | { "name": "DX2Main.exe", "type": "game"} 18 | { "name": "dx2.exe", "type": "game"} 19 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/disgaea.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/405900 2 | { "name": "dis1_st.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/495280 5 | { "name": "disgaea2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1233880 8 | { "name": "Disgaea4pc.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/803600 11 | { "name": "disgaea5.exe", "type": "game"} 12 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/dishonored.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/205100 2 | # https://store.steampowered.com/app/403640 3 | { "name": "Dishonored.exe", "type": "game"} 4 | { "name": "Dishonored2.exe", "type": "game"} 5 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/divinityos.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/373420 2 | # https://store.steampowered.com/app/435150 3 | { "name": "EoCApp.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/dragonage.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/47810 2 | { "name": "DAOrigins.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/1238040 5 | { "name": "DragonAge2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1222690 8 | { "name": "DragonAgeInquisition.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/dukenukem.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/434050 2 | { "name": "duke3d.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/dungeonsiege.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/39190 2 | { "name": "DungeonSiege.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/39200 5 | { "name": "DungeonSiege2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/39160 8 | { "name": "Dungeon Siege III.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/dxball2.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/922400 2 | { "name": "DXBall2.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/environmentalstationalpha.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/350070/Environmental_Station_Alpha/ 2 | { "name": "Environmental Station Alpha.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/evilgenius.rules: -------------------------------------------------------------------------------- 1 | # Evil Genius - https://store.steampowered.com/app/3720/Evil_Genius/ 2 | { "name": "EvilGeniusLauncher.exe", "type": "game-launcher" } 3 | { "name": "EvilGeniusExecStub-Release.exe", "type": "game" } 4 | # Evil Genius 2 - https://store.steampowered.com/app/700600/Evil_Genius_2_World_Domination/ 5 | { "name": "eg2.exe", "type": "game-launcher" } 6 | { "name": "evilgenius_dx12.exe", "type": "game" } 7 | { "name": "evilgenius_vulkan.exe", "type": "game" } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/expendable.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/804000/Expendable/ 2 | { "name": "Expendable.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/fable.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/288470/Fable_Anniversary 2 | { "name": "Fable Anniversary.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/204030/Fable__The_Lost_Chapters 5 | { "name": "Fable.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/fallout.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/38400 2 | { "name": "falloutw.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/38410 5 | { "name": "FALLOUT2.exe", "type": "game"} 6 | { "name": "fallout2.exe", "type": "game"} 7 | { "name": "fallout2HR.exe", "type": "game"} 8 | { "name": "FalloutClient.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/22370 11 | { "name": "Fallout3.exe", "type": "game"} 12 | { "name": "Fallout3 - Garden of Eden Creation Kit.exe", "type": "game"} 13 | 14 | # https://store.steampowered.com/app/22380 15 | { "name": "FalloutNV.exe", "type": "game"} 16 | 17 | # https://store.steampowered.com/app/377160 18 | { "name": "Fallout4.exe", "type": "game"} 19 | 20 | # https://store.steampowered.com/app/1151340 21 | { "name": "Fallout76.exe", "type": "game"} 22 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/fear.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/21090 2 | { "name": "FEAR.exe", "type": "game"} 3 | { "name": "FEARMP.exe", "type": "game"} 4 | { "name": "FEARXP.exe", "type": "game"} 5 | { "name": "FEARXP2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/16450 8 | { "name": "FEAR2.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/21100 11 | { "name": "F.E.A.R. 3.exe", "type": "game"} 12 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/gothic.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/65540 2 | # https://github.com/GothicFixTeam/GothicFix 3 | { "name": "GOTHIC.EXE", "type": "game"} 4 | { "name": "GothicMod.exe", "type": "game"} 5 | 6 | # https://store.steampowered.com/app/39510 7 | # https://www.worldofgothic.de/dl/download_folder18.htm#18 8 | { "name": "Gothic2.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/39500 11 | { "name": "Gothic3.exe", "type": "game"} 12 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/grandia.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1034860 2 | { "name": "grandia.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/330390 5 | { "name": "grandia2.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/gta.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/ 2 | { "name": "GTA5.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/12210/Grand_Theft_Auto_IV_The_Complete_Edition/ 5 | { "name": "GTAIV.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/12120/Grand_Theft_Auto_San_Andreas/ 8 | { "name": "gta-sa.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/12110/Grand_Theft_Auto_Vice_City/ 11 | { "name": "gta-vc.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/12100/Grand_Theft_Auto_III 14 | { "name": "gta3.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/12180/Grand_Theft_Auto_2 17 | { "name": "gta2.exe", "type": "game"} 18 | 19 | # https://store.steampowered.com/app/12170/Grand_Theft_Auto 20 | { "name": "Grand Theft Auto.exe", "type": "game"} 21 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/hitman.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/6900 2 | { "name": "Hitman.Exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/6850 5 | { "name": "hitman2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/247430 8 | { "name": "HitmanContracts.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/6860 11 | { "name": "HitmanBloodMoney.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/203140 14 | { "name": "HMA.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/236870 17 | { "name": "HITMAN.exe", "type": "game"} 18 | 19 | # https://store.steampowered.com/app/863550 20 | { "name": "HITMAN2.exe", "type": "game"} 21 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/judgedredd.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/3710 2 | { "name": "Dredd.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/killer7.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/868520/killer7/ 2 | { "name": "Killer7Win.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/261110/Killer_is_Dead__Nightmare_Edition/ 5 | { "name": "KidGame.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/killing-floor-2.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/232090/Killing_Floor_2/ 2 | {"name": "KFGame.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/kingoffighters.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/222940/THE_KING_OF_FIGHTERS_XIII_STEAM_EDITION 2 | { "name": "kofxiii.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/571260/THE_KING_OF_FIGHTERS_XIV_STEAM_EDITION 5 | { "name": "kofxiv.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/222440/THE_KING_OF_FIGHTERS_2002_UNLIMITED_MATCH 8 | { "name": "KingOfFighters2002UM.exe", "type": "game"} 9 | { "name": "KingOfFighters2002UM_x64.exe", "type": "game"} 10 | 11 | # https://store.steampowered.com/app/222420/THE_KING_OF_FIGHTERS_98_ULTIMATE_MATCH_FINAL_EDITION 12 | { "name": "KingOfFighters98UM.exe", "type": "game"} 13 | 14 | # https://store.steampowered.com/app/702120/THE_KING_OF_FIGHTERS_97_GLOBAL_MATCH 15 | { "name": "KOF97.exe", "type": "game"} 16 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/kingpin.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/38430/Kingpin__Life_of_Crime 2 | { "name": "kingpin.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/lanoire.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/110800 2 | { "name": "LANoire.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/lastblade.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/465840 2 | { "name": "LastBlade.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/702110 5 | { "name": "LastBlade2App.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/lego.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/32440/LEGO_Star_Wars__The_Complete_Saga/ 2 | { "name": "LEGOStarWarsSaga.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/32510/LEGO_Star_Wars_III__The_Clone_Wars/ 5 | { "name": "LEGOCloneWars.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/438640/LEGO_STAR_WARS_The_Force_Awakens/ 8 | { "name": "LEGOSWTFA.exe", "type": "game"} 9 | { "name": "LEGOSWTFA_DX11.exe", "type": "game"} 10 | 11 | # https://store.steampowered.com/app/647830/LEGO_Marvel_Super_Heroes_2/ 12 | { "name": "LEGOMARVEL2.exe", "type": "game"} 13 | { "name": "LEGOMARVEL2_DX11.exe", "type": "game"} 14 | 15 | # https://store.steampowered.com/app/829110/LEGO_DC_SuperVillains/ 16 | { "name": "LEGO DC Super-villains_DX11.exe", "type": "game"} 17 | 18 | # https://store.steampowered.com/app/249130/LEGO_Marvel_Super_Heroes/ 19 | { "name": "LEGOMARVEL.exe", "type": "game"} 20 | 21 | # https://store.steampowered.com/app/311770/LEGO_Pirates_of_the_Caribbean_The_Video_Game/ 22 | { "name": "LEGOPirates.exe", "type": "game"} 23 | 24 | # https://store.steampowered.com/app/214510/LEGO_The_Lord_of_the_Rings/ 25 | { "name": "LEGOLOTR.exe", "type": "game"} 26 | 27 | # https://store.steampowered.com/app/21130/LEGO_Harry_Potter_Years_14/ 28 | { "name": "LEGOHarryPotter.exe", "type": "game"} 29 | 30 | # https://store.steampowered.com/app/204120/LEGO_Harry_Potter_Years_57/ 31 | { "name": "harry2.exe", "type": "game"} 32 | 33 | # https://store.steampowered.com/app/313690/LEGO_Batman_3_Beyond_Gotham/ 34 | { "name": "LEGOBatman3.exe", "type": "game"} 35 | { "name": "LEGOBatman3_DX11.exe", "type": "game"} 36 | 37 | # https://store.steampowered.com/app/332310/LEGO_Worlds/ 38 | { "name": "LEGO_Worlds.exe", "type": "game"} 39 | { "name": "LEGO_Worlds_DX11.exe", "type": "game"} 40 | 41 | # https://store.steampowered.com/app/405310/LEGO_MARVELs_Avengers/ 42 | { "name": "LEGOMARVELAvengers.exe", "type": "game"} 43 | { "name": "LEGOMARVELAvengers_DX11.exe", "type": "game"} 44 | 45 | # https://store.steampowered.com/app/352400/LEGO_Jurassic_World/ 46 | { "name": "LEGOJurassicWorld.exe", "type": "game"} 47 | { "name": "LEGOJurassicWorld_DX11.exe", "type": "game"} 48 | 49 | # https://store.steampowered.com/app/285160/LEGO_The_Hobbit/ 50 | { "name": "LEGOHobbit.exe", "type": "game"} 51 | { "name": "LEGOHobbit_DX11.exe", "type": "game"} 52 | 53 | # https://store.steampowered.com/app/32330/LEGO_Indiana_Jones_The_Original_Adventures/ 54 | { "name": "LEGOIndy.exe", "type": "game"} 55 | 56 | # https://store.steampowered.com/app/578330/LEGO_City_Undercover/ 57 | { "name": "LEGOLCUR_DX11.exe", "type": "game"} 58 | 59 | # https://store.steampowered.com/app/21000/LEGO_Batman_The_Videogame/ 60 | { "name": "LEGOBatman.exe", "type": "game"} 61 | 62 | # https://store.steampowered.com/app/818320/LEGO_The_Incredibles/ 63 | { "name": "LEGO The Incredibles.exe", "type": "game"} 64 | { "name": "LEGO The Incredibles_DX11.exe", "type": "game"} 65 | 66 | # https://store.steampowered.com/app/640590/The_LEGO_NINJAGO_Movie_Video_Game/ 67 | { "name": "LEGONINJAGO.exe", "type": "game"} 68 | { "name": "LEGONINJAGO_DX11.exe", "type": "game"} 69 | 70 | # https://store.steampowered.com/app/32450/LEGO_Indiana_Jones_2_The_Adventure_Continues/ 71 | { "name": "LEGOIndy2.exe", "type": "game"} 72 | 73 | # https://store.steampowered.com/app/213330/LEGO_Batman_2_DC_Super_Heroes/ 74 | { "name": "LEGOBatman2.exe", "type": "game"} 75 | 76 | # https://store.steampowered.com/app/267530/The_LEGO_Movie__Videogame/ 77 | { "name": "LEGOEMMET.exe", "type": "game"} 78 | 79 | # https://store.steampowered.com/app/881320/The_LEGO_Movie_2_Videogame/ 80 | { "name": "LEGO The LEGO Movie 2_DX11.exe", "type": "game"} 81 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/manhunt.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/12130 2 | { "name": "manhunt.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/masseffect.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/17460 2 | { "name": "MassEffect.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/24980 5 | { "name": "MassEffect2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/1238020 8 | { "name": "MassEffect3.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/maxpayne.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/12140 2 | { "name": "maxpayne.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/12150 5 | { "name": "maxpayne2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/204100 8 | { "name": "MaxPayne3.exe", "type": "game"} 9 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/minoria.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/940910 2 | { "name": "Minoria.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/morrowind.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/22320 2 | { "name": "Morrowind.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/ninokuni.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/798460 2 | { "name": "NinoKuni_WotWW_Remastered.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/589360 5 | { "name": "Nino2.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/nosferatu.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/283290 2 | { "name": "Nosferatu.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/oblivion.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/900883 2 | { "name": "Oblivion.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/octopathtraveler.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/921570 2 | { "name": "Octopath_Traveler.exe", "type": "game"} 3 | { "name": "Octopath_Traveler-Win64-Shipping.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/painkiller.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/214870/Painkiller_Hell__Damnation/ 2 | { "name": "PKHDGame-Win32-Shipping.ex", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/39530/Painkiller_Black_Edition/ 5 | { "name": "Painkiller.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/3270/Painkiller_Overdose/ 8 | { "name": "Overdose.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/206760/Painkiller_Recurring_Evil/ 11 | { "name": "RecurringEvil.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/65560/Painkiller_Redemption/ 14 | { "name": "Redemption.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/39560/Painkiller_Resurrection/ 17 | { "name": "Resurrection.exe", "type": "game"} 18 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/redfaction.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/20530 2 | # https://github.com/rafalh/dashfaction 3 | { "name": "RF.exe", "type": "game"} 4 | { "name": "RF_120na.exe", "type": "game"} 5 | 6 | # https://store.steampowered.com/app/20550 7 | { "name": "rf2.exe", "type": "game"} 8 | 9 | # https://store.steampowered.com/app/55110 10 | { "name": "RedFactionArmageddon.exe", "type": "game"} 11 | { "name": "RedFactionArmageddon_DX11.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/667720 14 | { "name": "rfg.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/20500 17 | { "name": "RFG.exe", "type": "game"} 18 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/residentevil.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/418370/Resident_Evil_7_Biohazard 2 | { "name": "re7.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/883710/Resident_Evil_2 5 | { "name": "re2.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/952060/Resident_Evil_3 8 | { "name": "re3.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/254700/Resident_Evil_4 11 | { "name": "bio4.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/221040/Resident_Evil_6 14 | { "name": "BH6.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/21690/Resident_Evil_5 17 | { "name": "re5dx9.exe", "type": "game"} 18 | 19 | # https://store.steampowered.com/app/339340/Resident_Evil_0 20 | { "name": "re0hd.exe", "type": "game"} 21 | 22 | # https://store.steampowered.com/app/287290/Resident_Evil_Revelations_2 23 | { "name": "rerev2.exe", "type": "game"} 24 | 25 | # https://store.steampowered.com/app/304240/Resident_Evil 26 | { "name": "bhd.exe", "type": "game"} 27 | 28 | # https://store.steampowered.com/app/222480/Resident_Evil_Revelations 29 | { "name": "rerev.exe", "type": "game"} 30 | 31 | # https://store.steampowered.com/app/209100/Resident_Evil_Operation_Raccoon_City 32 | { "name": "RaccoonCity.exe", "type": "game"} 33 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/roguetrooper.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/7020 2 | { "name": "RogueTrooper.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/529490 5 | { "name": "RTR_x64.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/rtypedimensionsex.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/928390 2 | { "name": "R-Type_Dimensions.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/rune.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/210950/Rune_Classic/ 2 | { "name": "Rune.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/samuraishodown.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1076550/SAMURAI_SHODOWN_V_SPECIAL 2 | { "name": "SSVS.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/999660/SAMURAI_SHODOWN_NEOGEO_COLLECTION 5 | { "name": "Samurai Shodown Collection.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/shenmue.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/758330/Shenmue_I__II/ 2 | { "name": "Shenmue.exe", "type": "game"} 3 | { "name": "Shenmue2.exe", "type": "game"} 4 | 5 | # https://store.steampowered.com/app/878670/Shenmue_III/ 6 | { "name": "Shenmue3.exe", "type": "game"} 7 | { "name": "Shenmue3-Win64-Shipping.exe", "type": "game"} 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/shogo.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/610860/Shogo_Mobile_Armor_Division/ 2 | { "name": "Shogo.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/sin.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1313/SiN_Gold/ 2 | { "name": "sin.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/smite.rules: -------------------------------------------------------------------------------- 1 | # https://www.smitegame.com/ 2 | { "name": "CoherentUI_Host", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/soldat.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/638490/Soldat/ 2 | { "name": "soldat.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/474220/Soldat_2/ 5 | { "name": "soldat2.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/stalker.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/4500 2 | { "name": "XR_3DA.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/20510 5 | # https://store.steampowered.com/app/41700 6 | { "name": "xrEngine.exe", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/starcitizen.rules: -------------------------------------------------------------------------------- 1 | # Star Citizen - https://robertsspaceindustries.com 2 | { "name": "StarCitizen.exe", "type": "game" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/systemshock2.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/238210 2 | { "name": "SS2.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/teso.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/306130/ 2 | { "name": "eso64.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/theascent.rules: -------------------------------------------------------------------------------- 1 | # The Ascent - https://store.steampowered.com/app/979690/The_Ascent/ 2 | { "name": "TheAscent.exe", "type": "game" } 3 | { "name": "TheAscent-Win64-Shipping.exe", "type": "game" } 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/thief.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/211600 2 | # https://www.ttlg.com/forums/showthread.php?t=134733 3 | { "name": "THIEF.EXE", "type": "game"} 4 | { "name": "THIEF_no_ddfix.EXE", "type": "game"} 5 | 6 | # https://store.steampowered.com/app/239160 7 | { "name": "Shipping-ThiefGame.exe", "type": "game"} 8 | 9 | # https://store.steampowered.com/app/211740 10 | # https://www.ttlg.com/forums/showthread.php?t=146448/ 11 | { "name": "thief2.exe", "type": "game"} 12 | { "name": "thief2_no_ddfix.exe", "type": "game"} 13 | { "name": "Thief2.exe", "type": "game"} 14 | 15 | # https://store.steampowered.com/app/6980 16 | { "name": "t3.exe", "type": "game"} 17 | { "name": "T3Main.exe", "type": "game"} 18 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/totalannihilation.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/298030/Total_Annihilation/ 2 | { "name": "TotalA.exe", "type": "game"} 3 | { "name": "TAE.EXE", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/underrail.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/250520/UnderRail/ 2 | { "name": "underrail.exe", "type": "game"} 3 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/unreal.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/13250/Unreal_Gold/ 2 | { "name": "Unreal.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/13240/Unreal_Tournament_Game_of_the_Year_Edition/ 5 | { "name": "UnrealTournament.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/13230/Unreal_Tournament_2004_Editors_Choice_Edition/ 8 | { "name": "UT2004.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/13200/Unreal_2_The_Awakening/ 11 | { "name": "Unreal2.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/13210/Unreal_Tournament_3_Black/ 14 | { "name": "UT3.exe", "type": "game"} 15 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/uplay.rules: -------------------------------------------------------------------------------- 1 | #Uplay is a Digital distribution, digital rights management, multiplayer and communications service developed by Ubisoft https://uplay.ubisoft.com/ 2 | 3 | {"name": "upc.exe", "type": "game-launcher"} 4 | {"name": "UbisoftGameLaun", "type": "game-launcher"} 5 | {"name": "UplayWebCore.ex", "type": "game-launcher"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/vtmb.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/2600/Vampire_The_Masquerade__Bloodlines/ 2 | { "name": "vampire.exe", "type": "game"} 3 | 4 | # https://www.moddb.com/mods/vtmb-unofficial-patch 5 | { "name": "Vampire.exe", "type": "game"} 6 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/witcher.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/20900 2 | # https://store.steampowered.com/app/20920 3 | # https://store.steampowered.com/app/292030 4 | { "name": "witcher.exe", "type": "game"} 5 | { "name": "witcher2.exe", "type": "game"} 6 | { "name": "witcher3.exe", "type": "game"} 7 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/wows.rules: -------------------------------------------------------------------------------- 1 | # https://worldofwarships.eu/ 2 | # The Launcher is the application that downloads and applies the updates. 3 | # It regularely interrupts other processes' (e.g. Browsers, Image Viewers, Music Players, ...) IO operations 4 | # which causes hangs and interruptions. THis is the reason for sheduling it with such a low priority. 5 | { "name": "WoWSLauncher.exe", "type": "BG_CPUIO" } 6 | # That's the actual command of the game (the argument vector that is displayed in top and htop is different). 7 | { "name": "worldofwarships", "type": "game" } 8 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/wrathaor.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/1000410/WRATH_Aeon_of_Ruin/ 2 | { "name": "wrath.exe", "type": "game"} 3 | { "name": "wrath-sdl.exe", "type": "game"} 4 | -------------------------------------------------------------------------------- /ananicy.d/00-default/wine/ys.rules: -------------------------------------------------------------------------------- 1 | # https://store.steampowered.com/app/579180/Ys_VIII_Lacrimosa_of_DANA 2 | { "name": "ys8.exe", "type": "game"} 3 | 4 | # https://store.steampowered.com/app/587110/Ys_Memories_of_Celceta 5 | { "name": "Ysc_dx11.exe", "type": "game"} 6 | 7 | # https://store.steampowered.com/app/587100/Ys_SEVEN 8 | { "name": "Ys7.exe", "type": "game"} 9 | 10 | # https://store.steampowered.com/app/207350/Ys_Origin 11 | { "name": "yso_win.exe", "type": "game"} 12 | 13 | # https://store.steampowered.com/app/223810/Ys_I__II_Chronicles 14 | { "name": "ys1plus.exe", "type": "game"} 15 | 16 | # https://store.steampowered.com/app/207320/Ys_The_Oath_in_Felghana 17 | { "name": "ysf_win.exe", "type": "game"} 18 | { "name": "ysf_win_dx9.exe", "type": "game"} 19 | 20 | # https://store.steampowered.com/app/312540/Ys_VI_The_Ark_of_Napishtim 21 | { "name": "ys6_win.exe", "type": "game"} 22 | { "name": "ys6_win_dx9.exe", "type": "game"} 23 | -------------------------------------------------------------------------------- /ananicy.d/00-default/youtube-dl.rules: -------------------------------------------------------------------------------- 1 | # youtube-dl - video downloader https://rg3.github.io/youtube-dl/ 2 | { "name": "youtube-dl", "type": "BG_CPUIO" } 3 | -------------------------------------------------------------------------------- /ananicy.d/00-types.types: -------------------------------------------------------------------------------- 1 | 2 | # CPU 3 | # nice - determines which process gets more CPU cycles 4 | # ranges from -20 (highest priority) to 19 (lowest priority) 5 | # default is 0 6 | # sched - don't touch unless you know what you're doing 7 | # 8 | # IO 9 | # ionice - determines which process gets more IO 10 | # ranges from 0 (highest priority) to 7 (lowest priority) 11 | # default is 4 12 | # ioclass 13 | # realtime 14 | # avoid using 15 | # highest IO priority, possible to starve other processes 16 | # can be further adjusted with ionice 17 | # best-effort 18 | # this is the default ioclass 19 | # medium IO priority 20 | # can be further adjusted with ionice 21 | # idle 22 | # lowest IO priority 23 | # uses IO only if no other process needs IO 24 | # this ioclass can be given to processes that are known for starving the system 25 | # CANNOT be further adjusted with ionice 26 | 27 | # The `U` in `CPU_U` stands for `untouched` -> some applications might not like messing with their niceness 28 | # The `H` in `CPU_H` stands for `high priority` -> some applications might require higher priority that the base type 29 | # The `L` in `CPU_L` stands for `low priority` -> some applications might be less relevant / stress the system when given the priority of the base class 30 | # Same goes for `IO_U`, `IO_H` and `IO_L` 31 | 32 | ### Generic Types 33 | 34 | {"type":"archiver", "nice":1, "ionice":5} 35 | 36 | {"type":"audio-server"} 37 | 38 | {"type":"chat"} 39 | 40 | {"type":"common-utility"} 41 | 42 | {"type":"compiler", "nice":1} 43 | 44 | {"type":"database"} 45 | 46 | # desktop environment, window manager or any integral part of a desktop (note: audio-server already has it's own category) 47 | {"type":"DEWM"} 48 | 49 | # TODO split into `text editor`, `document editor` and `IDE`? 50 | {"type":"document-editor"} 51 | 52 | {"type":"document-viewer"} 53 | 54 | {"type":"email-client"} 55 | 56 | {"type":"file-manager"} 57 | 58 | {"type":"file-sync", "nice":19, "ionice":7} 59 | 60 | # note: increasing some games' priority might cause a crash 61 | {"type":"game", "nice":-20, "ionice":0} 62 | 63 | {"type":"game-launcher"} 64 | 65 | {"type":"image-editor"} 66 | 67 | {"type":"image-viewer"} 68 | 69 | {"type":"music-player"} 70 | 71 | {"type":"p2p-client"} 72 | 73 | {"type":"package-manager"} 74 | 75 | {"type":"remote-desktop"} 76 | 77 | {"type":"server", "nice":1} 78 | 79 | # some services might require less resources than others 80 | {"type":"service", "nice":1, "ionice":5} 81 | {"type":"service,CPU_U,IO_L", "ionice":7} 82 | 83 | {"type":"screenshotter"} 84 | 85 | {"type":"terminal"} 86 | 87 | {"type":"torrent", "nice":1, "ionice":5} 88 | 89 | {"type":"video-player"} 90 | 91 | {"type":"VPN"} 92 | 93 | {"type":"VM"} 94 | 95 | {"type":"web-browser"} 96 | 97 | ######################## 98 | ### TODO marker type ### 99 | ######################## 100 | 101 | {"type":"TODO"} 102 | 103 | ######################## 104 | ### Depricated types ### 105 | ######################## 106 | 107 | #{"type":"Heavy_CPU", "nice":19, "ioclass":"best-effort", "ionice":7, "cgroup":"cpu90"} 108 | 109 | # BackGround CPU/IO Load 110 | # It's needed, but it must be as silent as possible 111 | #{"type":"BG_CPUIO", "nice":19, "ioclass":"idle", "sched":"idle", "cgroup":"cpu80" } 112 | 113 | #{"type":"LowLatency_RT", "nice":-10, "ioclass":"realtime"} 114 | -------------------------------------------------------------------------------- /ananicy.d/ananicy.conf: -------------------------------------------------------------------------------- 1 | ## Ananicy 2.X configuration 2 | # Ananicy run full system scan every "check_freq" seconds 3 | # supported values 0.01..86400 4 | # values which have sense: 1..60 5 | check_freq=10 6 | 7 | # Verbose msg: true/false 8 | cgroup_load=true 9 | type_load=true 10 | rule_load=true 11 | 12 | apply_nice=true 13 | apply_ioclass=true 14 | apply_ionice=true 15 | apply_sched=true 16 | apply_oom_score_adj=true 17 | apply_cgroup=true 18 | 19 | check_disks_schedulers=true 20 | -------------------------------------------------------------------------------- /ananicy.d/rules.broken: -------------------------------------------------------------------------------- 1 | # Broken rules for Ananicy 2.X 2 | 3 | NAME="^[[:alnum:]/]*python. [[:alnum:]/]*virt-manager" TYPE=LowLatency_RT 4 | 5 | NAME='xfce4/panel/wrapper-' TYPE=LowLatency_RT 6 | 7 | # https://smuxi.im/ 8 | NAME='^[[:alnum:]/]*mono.*smuxi' TYPE=CHAT 9 | 10 | # https://i3wm.org 11 | # https://github.com/vivien/i3blocks 12 | NAME='/i3' TYPE=LowLatency_RT 13 | NAME='/i3-bar' TYPE=LowLatency_RT 14 | NAME='/i3-blocks' TYPE=LowLatency_RT 15 | 16 | # Possible gcc? 17 | NAME=cc1 TYPE=HEAVY_CPU 18 | 19 | # Firefox? 20 | NAME="Web Content" TYPE=DOC_VIEW 21 | -------------------------------------------------------------------------------- /ananicy.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | # TODO 4 | # fix startup errors 5 | # fix the cgroups errors at startup (it might be better to leave them as is) 6 | # rename service to minq-ananicy, rename rule folder to minq-ananicy, rename this file to minq_ananicy 7 | 8 | import os 9 | import re 10 | import sys 11 | import time 12 | import subprocess 13 | import json 14 | import _thread 15 | import pprint 16 | 17 | from enum import Enum, unique, Flag, auto 18 | from time import sleep 19 | 20 | 21 | def is_simple_proc_pid(pid): 22 | if not os.path.isdir("/proc/{}".format(pid)): 23 | return False 24 | try: 25 | if not os.path.realpath("/proc/{}/exe".format(pid)): 26 | return False 27 | except FileNotFoundError as err: 28 | return False 29 | return True 30 | 31 | 32 | def print_verbose_msg(msg, verbose_opts, key): 33 | if key in verbose_opts: 34 | if verbose_opts[key]: 35 | print(msg) 36 | 37 | 38 | class Failure(Exception): 39 | pass 40 | 41 | 42 | @unique 43 | class ProcSchedulerPolicy(Enum): 44 | NORMAL = 0 45 | FIFO = 1 46 | RR = 2 47 | BATCH = 3 48 | ISO = 4 49 | IDLE = 5 50 | DEADLINE = 6 51 | OTHER = 99 52 | 53 | @classmethod 54 | def _missing_(cls, value): 55 | return ProcSchedulerPolicy.OTHER 56 | 57 | 58 | class TPID: 59 | 60 | class State(Flag): 61 | """ Flag set if corresponding rule 62 | have been applied 63 | """ 64 | NICE = auto() 65 | IOCLASS = auto() 66 | SCHED = auto() 67 | OOM_SCORE_ADJ = auto() 68 | CGROUP = auto() 69 | ALLSET = NICE | IOCLASS | SCHED | OOM_SCORE_ADJ | CGROUP 70 | 71 | def __init__(self, pid: int, tpid: int, verbose_opts={}): 72 | self.verbose_opts = verbose_opts 73 | self.pid = pid 74 | self.tpid = tpid 75 | self.prefix = "/proc/{}/task/{}/".format(pid, tpid) 76 | self.parent = "/proc/{}/".format(pid) 77 | self.exe = "/proc/{}/exe".format(pid) 78 | try: 79 | self.exe = os.path.realpath("/proc/{}/exe".format(pid)) 80 | except: 81 | pass 82 | self.__oom_score_adj = self.prefix + "/oom_score_adj" 83 | 84 | self._stat = None 85 | self.__cmd = None 86 | self.__ionice = None 87 | self.__ioclass = None 88 | self.__cgroups = [] 89 | 90 | self.__state = TPID.State(0) 91 | 92 | def exists(self): 93 | return os.path.exists("/proc/{}/task/{}".format(self.pid, self.tpid)) 94 | 95 | @property 96 | def state(self): 97 | return self.__state 98 | 99 | @property 100 | def cmd(self): 101 | if not self.__cmd: 102 | _exe = self.exe.split('/') 103 | self.__cmd = _exe[-1] 104 | return self.__cmd 105 | 106 | @property 107 | def oom_score_adj(self): 108 | with open(self.__oom_score_adj, 'r') as _oom_score_adj_file: 109 | return int(_oom_score_adj_file.readline().rstrip()) 110 | 111 | def oom_score_adj(self, oom_score_adj): 112 | with open(self.__oom_score_adj, 'w') as _oom_score_adj_file: 113 | _oom_score_adj_file.write(str(oom_score_adj)) 114 | msg = "oom_score_adj: {}[{}/{}] -> {}".format( 115 | self.cmd, self.pid, self.tpid, oom_score_adj) 116 | print_verbose_msg(msg, self.verbose_opts, "apply_oom_score_adj") 117 | return True 118 | 119 | @property 120 | def stat(self): 121 | with open(self.prefix + "/stat") as _stat_file: 122 | return _stat_file.readline().strip() 123 | 124 | @property 125 | def stat_name(self): 126 | with open(self.prefix + "/status") as _status_file: 127 | try: 128 | name_line = _status_file.readline() 129 | line_list = name_line.split() 130 | if line_list: 131 | return line_list[1] 132 | except (UnicodeDecodeError, IndexError): 133 | pass 134 | return "" 135 | 136 | @property 137 | def nice(self): 138 | return os.getpriority(os.PRIO_PROCESS, self.tpid) 139 | 140 | def nice(self, nice: int): 141 | os.setpriority(os.PRIO_PROCESS, self.tpid, nice) 142 | msg = "renice: {}[{}/{}] -> {}".format(self.cmd, self.pid, self.tpid, nice) 143 | print_verbose_msg(msg, self.verbose_opts, "apply_nice") 144 | retcode = subprocess.run( 145 | ["renice", "-n", str(nice), "-p", 146 | str(self.pid)], 147 | stdout=subprocess.DEVNULL).returncode 148 | if retcode != 0: 149 | raise Failure() 150 | return True 151 | 152 | @property 153 | def autogroup(self): 154 | try: 155 | with open(self.parent + "/autogroup", 'r') as _autogroup: 156 | autogroup = _autogroup.readline().strip('/\n').split(" nice ") 157 | except FileNotFoundError: 158 | return None 159 | try: 160 | group_num = int(autogroup[0].split('-')[1]) 161 | nice = int(autogroup[1]) 162 | except: 163 | return None 164 | return { "group": group_num, "nice": nice } 165 | 166 | @autogroup.setter 167 | def autogroup(self, autogroup_nice): 168 | try: 169 | with open(self.parent + "/autogroup", 'w') as _autogroup: 170 | _autogroup.write(str(autogroup_nice)) 171 | except FileNotFoundError: 172 | pass 173 | 174 | @property 175 | def cmdline(self): 176 | # read command line 177 | with open(self.prefix + '/cmdline', mode='rb') as cmdline_file: 178 | _cmdline = cmdline_file.read() 179 | # remove null character from end 180 | if len(_cmdline) > 0 and _cmdline[-1] == 0: 181 | _cmdline = _cmdline[:-1] 182 | # split on null characters 183 | _cmdline = _cmdline.split(b'\x00') 184 | # convert arguments from bytes to strings 185 | return tuple(arg.decode() for arg in _cmdline) 186 | 187 | def __ionice_cmd(self, tpid): 188 | ret = subprocess.run(["ionice", "-p", str(tpid)], 189 | check=True, 190 | stdout=subprocess.PIPE, 191 | universal_newlines=True) 192 | return ret 193 | 194 | def __get_ioprop(self): 195 | ret = self.__ionice_cmd(self.tpid) 196 | stdout = ret.stdout.rsplit(': prio ') 197 | self.__ioclass = stdout[0].rstrip() 198 | if self.__ioclass == "none": 199 | self.__ioclass = "best-effort" 200 | # can return only ioclass, if process class are idle 201 | if len(stdout) == 2: 202 | self.__ionice = stdout[1].rstrip() 203 | else: 204 | self.__ionice = None 205 | 206 | @property 207 | def ionice(self): 208 | if not self.__ionice: 209 | self.__get_ioprop() 210 | return self.__ionice 211 | 212 | @property 213 | def ioclass(self): 214 | if not self.__ioclass: 215 | self.__get_ioprop() 216 | return self.__ioclass 217 | 218 | def ioclass(self, ioclass, ionice): 219 | args = [] 220 | if ionice is not None: 221 | args.extend(("-n", str(ionice))) 222 | msg = "ionice: {}[{}/{}] -> {}".format( 223 | self.cmd, self.pid, self.tpid, ionice) 224 | print_verbose_msg(msg, self.verbose_opts, "apply_ionice") 225 | if ioclass is not None: 226 | args.extend(("-c", str(ioclass))) 227 | msg = "ioclass: {}[{}/{}] -> {}".format( 228 | self.cmd, self.pid, self.tpid, ioclass) 229 | print_verbose_msg(msg, self.verbose_opts, "apply_ioclass") 230 | retcode = subprocess.run( 231 | ["ionice", "-p", str(self.tpid), *args], 232 | stdout=subprocess.DEVNULL).returncode 233 | if retcode != 0: 234 | raise Failure() 235 | return True 236 | 237 | @property 238 | def sched(self): 239 | if not self._stat: 240 | m = re.search('\\) . .*', self.stat) 241 | self._stat = m.group(0).rsplit() 242 | _sched = int(self._stat[39]) 243 | return ProcSchedulerPolicy(_sched).name.lower() 244 | 245 | def sched(self, sched, rtprio): 246 | arg_map = { 247 | 'other': '-N', 248 | 'normal': '-N', 249 | 'rr': '-R', 250 | 'fifo': '-F', 251 | 'batch': '-B', 252 | 'iso': '-I', 253 | 'idle': '-D' 254 | } 255 | sched_arg = arg_map[sched] 256 | l_prio = None 257 | if sched == "other" and c_sched == "normal": 258 | return True 259 | if sched == "rr" or sched == "fifo": 260 | l_prio = rtprio or 1 261 | cmd = ["schedtool", sched_arg] 262 | if l_prio: 263 | cmd += ["-p", str(l_prio)] 264 | cmd += [str(self.pid)] 265 | msg = "sched: {}[{}/{}] -> {}".format(self.cmd, self.pid, 266 | self.tpid, sched) 267 | print_verbose_msg(msg, self.verbose_opts, "apply_sched") 268 | retcode = subprocess.run(cmd, stdout=subprocess.DEVNULL).returncode 269 | if retcode != 0: 270 | raise Failure() 271 | return True 272 | 273 | @property 274 | def rtprio(self): 275 | if not self._stat: 276 | m = re.search('\\) . .*', self.stat) 277 | self._stat = m.group(0).rsplit() 278 | return int(self._stat[38]) 279 | 280 | @property 281 | def cgroups(self): 282 | return self.__cgroups 283 | 284 | def cgroups(self, cgroups): 285 | self.__cgroups = cgroups 286 | for cgroup in self.__cgroups: 287 | cgroup.add_pid(self.tpid) 288 | msg = "Cgroup: {}[{}] added to {}".format( 289 | self.cmd, self.tpid, cgroup.name) 290 | print_verbose_msg(msg, self.verbose_opts, "apply_cgroup") 291 | return True 292 | 293 | def apply_rules(self, rules, cgroups): 294 | # Any not specified rule will be considered applied 295 | if rules.get("nice"): 296 | if self.nice(rules["nice"]): 297 | self.__state = self.__state | TPID.State.NICE 298 | else: 299 | self.__state = self.__state | TPID.State.NICE 300 | if rules.get("ioclass") or rules.get("ionice"): 301 | if self.ioclass(rules.get("ioclass"), rules.get("ionice")): 302 | self.__state = self.__state | TPID.State.IOCLASS 303 | else: 304 | self.__state = self.__state | TPID.State.IOCLASS 305 | if rules.get("sched"): 306 | if self.sched(rules["sched"], rules["rtprio"]): 307 | self.__state = self.__state | TPID.State.SCHED 308 | else: 309 | self.__state = self.__state | TPID.State.SCHED 310 | if rules.get("oom_score_adj"): 311 | if self.oom_score_adj(rules["oom_score_adj"]): 312 | self.__state = self.__state | TPID.State.OOM_SCORE_ADJ 313 | else: 314 | self.__state = self.__state | TPID.State.OOM_SCORE_ADJ 315 | if rules.get("cgroup"): 316 | if self.cgroups([cgroups[rules["cgroup"]]]): 317 | self.__state = self.__state | TPID.State.CGROUP 318 | else: 319 | self.__state = self.__state | TPID.State.CGROUP 320 | 321 | 322 | class CgroupController: 323 | PERIOD_US = 100000 324 | CGROUP_FS = "/sys/fs/cgroup/" 325 | TYPE = "cpu" 326 | 327 | def __init__(self, name, cpuquota, update_thread=False): 328 | if not os.path.exists(self.CGROUP_FS): 329 | raise Failure("cgroup fs not mounted") 330 | 331 | if not os.path.exists(self.CGROUP_FS + self.TYPE): 332 | raise Failure("cgroup fs: {} missing".format(self.TYPE)) 333 | 334 | self.name = name 335 | self.work_path = self.CGROUP_FS + self.TYPE + "/" + self.name 336 | if not os.path.exists(self.work_path): 337 | os.makedirs(self.work_path) 338 | 339 | self.ncpu = os.cpu_count() 340 | self.quota_us = self.PERIOD_US * self.ncpu * cpuquota // 100 341 | self.cpu_shares = 1024 * cpuquota // 100 342 | self.tasks = dict() 343 | self.files = {'tasks': self.work_path + "/tasks"} 344 | 345 | try: 346 | with open(self.work_path + "/cpu.cfs_period_us", 'w') as fd: 347 | fd.write(str(self.PERIOD_US)) 348 | with open(self.work_path + "/cpu.cfs_quota_us", 'w') as fd: 349 | fd.write(str(self.quota_us)) 350 | with open(self.work_path + "/cpu.shares", 'w') as fd: 351 | fd.write(str(self.cpu_shares)) 352 | except PermissionError as e: 353 | raise Failure(e) 354 | 355 | self.files_mtime = {self.files["tasks"]: 0.0} 356 | 357 | if update_thread: 358 | _thread.start_new_thread(self.__tread_update_tasks, ()) 359 | 360 | def __tread_update_tasks(self): 361 | tasks_path = self.files["tasks"] 362 | while True: 363 | while self.files_mtime[tasks_path] == os.path.getmtime(tasks_path): 364 | sleep(1) 365 | 366 | self.files_mtime[self.files["tasks"]] = os.path.getmtime( 367 | tasks_path) 368 | 369 | tasks = {} 370 | with open(self.files["tasks"], 'r') as fd: 371 | for pid in fd.readlines(): 372 | pid = int(pid.strip()) 373 | tasks[pid] = True 374 | self.tasks = tasks 375 | 376 | def pid_in_cgroup(self, pid): 377 | return bool(self.tasks.get(int(pid))) 378 | 379 | def add_pid(self, pid): 380 | try: 381 | with open(self.files["tasks"], 'w') as _tasks_file: 382 | _tasks_file.write(str(pid)) 383 | except OSError: 384 | pass 385 | 386 | 387 | class Ananicy: 388 | def __init__(self, config_dir="/etc/ananicy.d/", daemon=True): 389 | self.dir_must_exits(config_dir) 390 | self.config_dir = config_dir 391 | self.cgroups = {} 392 | self.types = {} 393 | self.rules = {} 394 | self.proc = {} 395 | self.check_freq = 5 396 | self.verbose = { 397 | "cgroup_load": True, 398 | "type_load": True, 399 | "rule_load": True, 400 | "apply_nice": True, 401 | "apply_ioclass": True, 402 | "apply_ionice": True, 403 | "apply_sched": True, 404 | "apply_oom_score_adj": True, 405 | "apply_cgroup": True 406 | } 407 | 408 | self.load_config() 409 | if daemon: 410 | self.__check_disks_schedulers() 411 | else: 412 | for i in self.verbose: 413 | self.verbose[i] = False 414 | 415 | self.load_cgroups() 416 | self.load_types() 417 | self.load_rules() 418 | if os.getenv("NOTIFY_SOCKET"): 419 | subprocess.run(["systemd-notify", "--ready"]) 420 | 421 | def __strip_line(self, line): 422 | line = line.rstrip() 423 | # Remove comments from input 424 | line = line.split('#') 425 | return line[0] 426 | 427 | def __get_val(self, col): 428 | tmp = col.split('=') 429 | if not tmp: 430 | return "" 431 | return tmp[1].rstrip('"') 432 | 433 | def __check_nice(self, nice): 434 | if nice: 435 | if not -20 <= nice <= 19: 436 | raise Failure("Nice must be in range -20..19") 437 | return nice 438 | 439 | def __check_ionice(self, ionice): 440 | if ionice: 441 | if not 0 <= ionice <= 7: 442 | raise Failure("IOnice/IOprio allowed only in range 0-7") 443 | return ionice 444 | 445 | def __check_rtprio(self, rtprio): 446 | if rtprio: 447 | if not 1 <= rtprio <= 99: 448 | raise Failure("RTprio allowed only in range 1-99") 449 | return rtprio 450 | 451 | def __check_oom_score_adj(self, adj): 452 | if adj: 453 | if not -1000 <= adj <= 1000: 454 | raise Failure("OOM_SCORE_ADJ must be in range -1000..1000") 455 | return adj 456 | 457 | def __check_disks_schedulers(self): 458 | prefix = "/sys/class/block/" 459 | for disk in os.listdir(prefix): 460 | if re.search('loop', disk): 461 | continue 462 | if re.search('ram', disk): 463 | continue 464 | if re.search('sr', disk): 465 | continue 466 | scheduler = prefix + disk + "/queue/scheduler" 467 | if not os.path.exists(scheduler): 468 | continue 469 | with open(scheduler) as fd: 470 | c_sched = fd.readlines() 471 | c_sched = c_sched[0].rstrip() 472 | if re.search('\\[cfq\\]', c_sched): 473 | continue 474 | if re.search('\\[bfq\\]', c_sched): 475 | continue 476 | if re.search('\\[bfq-mq\\]', c_sched): 477 | continue 478 | 479 | msg = "Disk {} not use cfq/bfq scheduler IOCLASS/IONICE will not work on it".format( 480 | disk) 481 | if self.verbose["check_disks_schedulers"]: 482 | print(msg, flush=True) 483 | 484 | def __YN(self, val): 485 | return val.lower() in ("true", "yes", "1") 486 | 487 | def load_config(self): 488 | with open(self.config_dir + "ananicy.conf") as _config_file: 489 | for line in _config_file: 490 | line = self.__strip_line(line) 491 | for col in line.rsplit(): 492 | if "check_freq=" in col: 493 | check_freq = self.__get_val(col) 494 | self.check_freq = float(check_freq) 495 | if "cgroup_load=" in col: 496 | self.verbose["cgroup_load"] = self.__YN( 497 | self.__get_val(col)) 498 | if "type_load=" in col: 499 | self.verbose["type_load"] = self.__YN( 500 | self.__get_val(col)) 501 | if "rule_load=" in col: 502 | self.verbose["rule_load"] = self.__YN( 503 | self.__get_val(col)) 504 | if "apply_nice=" in col: 505 | self.verbose["apply_nice"] = self.__YN( 506 | self.__get_val(col)) 507 | if "apply_ioclass=" in col: 508 | self.verbose["apply_ioclass"] = self.__YN( 509 | self.__get_val(col)) 510 | if "apply_ionice=" in col: 511 | self.verbose["apply_ionice"] = self.__YN( 512 | self.__get_val(col)) 513 | if "apply_sched=" in col: 514 | self.verbose["apply_sched"] = self.__YN( 515 | self.__get_val(col)) 516 | if "apply_oom_score_adj=" in col: 517 | self.verbose["apply_oom_score_adj"] = self.__YN( 518 | self.__get_val(col)) 519 | if "apply_cgroup=" in col: 520 | self.verbose["apply_cgroup"] = self.__YN( 521 | self.__get_val(col)) 522 | if "check_disks_schedulers" in col: 523 | self.verbose["check_disks_schedulers"] = self.__YN( 524 | self.__get_val(col)) 525 | 526 | def load_cgroups(self): 527 | files = self.find_files(self.config_dir, '.*\\.cgroups') 528 | for file in files: 529 | if self.verbose["cgroup_load"]: 530 | print("Load cgroup:", file) 531 | with open(file) as _cgroups_file: 532 | for line_number, line in enumerate(_cgroups_file, start=1): 533 | try: 534 | self.get_cgroup_info(line) 535 | except Failure as e: 536 | str = "File: {}, Line: {}, Error: {}".format( 537 | file, line_number, e) 538 | print(str, flush=True) 539 | except json.decoder.JSONDecodeError as e: 540 | str = "File: {}, Line: {}, Error: {}".format( 541 | file, line_number, e) 542 | print(str, flush=True) 543 | 544 | def get_cgroup_info(self, line): 545 | line = self.__strip_line(line) 546 | if len(line) < 2: 547 | return 548 | 549 | line = json.loads(line, parse_int=int) 550 | cgroup = line.get("cgroup") 551 | if not cgroup: 552 | raise Failure('Missing "cgroup": ') 553 | 554 | cpuquota = line.get("CPUQuota") 555 | if not cpuquota: 556 | raise Failure('Missing "CPUQuota": ') 557 | 558 | self.cgroups[cgroup] = CgroupController(cgroup, cpuquota) 559 | 560 | def get_type_info(self, line): 561 | line = self.__strip_line(line) 562 | if len(line) < 2: 563 | return 564 | 565 | line = json.loads(line, parse_int=int) 566 | _type = line.get("type") 567 | if not _type: 568 | raise Failure('Missing "type": ') 569 | 570 | self.types[_type] = { 571 | "nice": self.__check_nice(line.get("nice")), 572 | "ioclass": line.get("ioclass"), 573 | "ionice": self.__check_ionice(line.get("ionice")), 574 | "sched": line.get("sched"), 575 | "rtprio": self.__check_rtprio(line.get("rtprio")), 576 | "oom_score_adj": self.__check_oom_score_adj( 577 | line.get("oom_score_adj")), 578 | "cgroup": line.get("cgroup") 579 | } 580 | 581 | def load_types(self): 582 | type_files = self.find_files(self.config_dir, '.*\\.types') 583 | for file in type_files: 584 | if self.verbose["type_load"]: 585 | print("Load types:", file) 586 | with open(file) as _types_file: 587 | for line_number, line in enumerate(_types_file, start=1): 588 | try: 589 | self.get_type_info(line) 590 | except Failure as e: 591 | out = "File: {}, Line: {}, Error: {}".format( 592 | file, line_number, e) 593 | print(out, flush=True) 594 | except json.decoder.JSONDecodeError as e: 595 | out = "File: {}, Line: {}, Error: {}".format( 596 | file, line_number, e) 597 | print(out, flush=True) 598 | 599 | def get_rule_info(self, line): 600 | line = self.__strip_line(line) 601 | if len(line) < 2: 602 | return 603 | 604 | line = json.loads(line, parse_int=int) 605 | name = line.get("name") 606 | if name == "": 607 | raise Failure('Missing "name": ') 608 | 609 | _type = line.get("type") 610 | if _type: 611 | if not self.types.get(_type): 612 | raise Failure('"type": "{}" not defined'.format(_type)) 613 | _type = self.types[_type] 614 | for attr in ("nice", "ioclass", "ionice", "sched", "rtprio", 615 | "oom_score_adj", "cgroup"): 616 | tmp = _type.get(attr) 617 | if not tmp: 618 | continue 619 | if not line.get(attr): 620 | line[attr] = tmp 621 | 622 | cgroup = line.get("cgroup") 623 | if not self.cgroups.get(cgroup): 624 | cgroup = None 625 | 626 | # might be best not to do this so that rules can be overwritten by the user 627 | #if name in self.rules: 628 | # raise Failure(f'Duplicate name "{name}": ') 629 | 630 | cmdlines = line.get("cmdlines") 631 | if cmdlines: 632 | cmdlines = frozenset(cmdlines) 633 | 634 | key = (name, cmdlines) 635 | 636 | self.rules[key] = { 637 | "nice": self.__check_nice(line.get("nice")), 638 | "ioclass": line.get("ioclass"), 639 | "ionice": self.__check_ionice(line.get("ionice")), 640 | "sched": line.get("sched"), 641 | "rtprio": self.__check_rtprio(line.get("rtprio")), 642 | "oom_score_adj": self.__check_oom_score_adj( 643 | line.get("oom_score_adj")), 644 | "type": line.get("type"), 645 | "cgroup": cgroup 646 | } 647 | 648 | def load_rules(self): 649 | rule_files = self.find_files(self.config_dir, '.*\\.rules') 650 | for file in rule_files: 651 | if self.verbose["rule_load"]: 652 | print("Load rules:", file) 653 | with open(file) as _rules_file: 654 | for line_number, line in enumerate(_rules_file, start=1): 655 | try: 656 | self.get_rule_info(line) 657 | except Failure as e: 658 | out = "File: {}, Line: {}, Error: {}".format( 659 | file, line_number, e) 660 | print(out, flush=True) 661 | except json.decoder.JSONDecodeError as e: 662 | out = "File: {}, Line: {}, Error: {}".format( 663 | file, line_number, e) 664 | print(out, flush=True) 665 | 666 | if not self.rules: 667 | raise Failure("No rules loaded") 668 | 669 | def dir_must_exits(self, path): 670 | if not os.path.exists(path): 671 | raise Failure("Missing dir: " + path) 672 | 673 | def find_files(self, path, name_mask): 674 | files = [] 675 | entries = sorted(os.listdir(path)) 676 | if not entries: 677 | return files 678 | for entry_name in entries: 679 | entry_path = path + "/" + entry_name 680 | if os.path.isdir(entry_path): 681 | files += self.find_files(entry_path, name_mask) 682 | if os.path.isfile(entry_path): 683 | if re.search(name_mask, entry_name): 684 | realpath = os.path.realpath(entry_path) 685 | files.append(realpath) 686 | return files 687 | 688 | def __proc_tpids(self): 689 | decimal_pids = filter(str.isdecimal, os.listdir("/proc")) 690 | for pid in filter(is_simple_proc_pid, decimal_pids): 691 | tasks_path = "/proc/{}/task/".format(pid) 692 | for tpid in filter(str.isdecimal, os.listdir(tasks_path)): 693 | yield TPID(int(pid), int(tpid), verbose_opts=self.verbose) 694 | 695 | def proc_map_update(self): 696 | proc_found = set() 697 | new_tpids = [] 698 | for tpid in self.__proc_tpids(): 699 | key = (tpid.pid, tpid.tpid, tpid.cmd) 700 | proc_found.add(key) 701 | if key in self.proc: 702 | continue 703 | else: 704 | new_tpid = tpid 705 | self.proc[key] = new_tpid 706 | new_tpids.append(new_tpid) 707 | exited_proc = set(self.proc.keys()) - proc_found 708 | # Remove exited from map 709 | for proc_key in exited_proc: 710 | del self.proc[proc_key] 711 | return new_tpids 712 | 713 | def get_tpid_rule(self, tpid: TPID): 714 | rule_cmdlines = tpid.cmdline 715 | for rule_name in [tpid.cmd, tpid.stat_name]: 716 | for key in self.rules: 717 | name,cmdlines = key 718 | if name == rule_name: 719 | if cmdlines: 720 | for cl in cmdlines: 721 | if cl not in rule_cmdlines: 722 | break 723 | else: 724 | return self.rules[key] 725 | else: 726 | return self.rules[key] 727 | 728 | def process_tpid(self, tpid): 729 | if not tpid.exists(): 730 | return 731 | rule = self.get_tpid_rule(tpid) 732 | if not rule: 733 | return 734 | tpid.apply_rules(rule, self.cgroups) 735 | if tpid.state != TPID.State.ALLSET: 736 | print("Warn: Not all rules were applied on {}[{}/{}] = {}".format(tpid.cmd, tpid.pid, tpid.tpid, tpid.state)) 737 | 738 | def run(self): 739 | while True: 740 | try: 741 | # proc_map_update returns only new found processes 742 | for tpid in self.proc_map_update(): 743 | self.process_tpid(tpid) 744 | except Exception as exc: 745 | print("Error: {}".format(exc)) 746 | sleep(self.check_freq) 747 | 748 | def dump_types(self): 749 | print(json.dumps(self.types, indent=4), flush=True) 750 | 751 | def dump_cgroups(self): 752 | cgroups_dict = { 753 | cgroup: self.cgroups[cgroup].__dict__ for cgroup in self.cgroups 754 | } 755 | print(json.dumps(cgroups_dict, indent=4), flush=True) 756 | 757 | def dump_rules(self): 758 | pprint.pp(self.rules) 759 | 760 | def dump_proc(self): 761 | self.proc_map_update() 762 | proc_dict = {} 763 | for tpid in self.proc: 764 | try: 765 | TPID_l = self.proc[tpid] 766 | proc_dict[tpid] = { 767 | "pid": TPID_l.pid, 768 | "tpid": TPID_l.tpid, 769 | "exe": TPID_l.exe, 770 | "cmd": TPID_l.cmd, 771 | "stat": TPID_l.stat, 772 | "stat_name": TPID_l.stat_name, 773 | "nice": TPID_l.nice, 774 | "autogroup": TPID_l.autogroup, 775 | "sched": TPID_l.sched, 776 | "rtprio": TPID_l.rtprio, 777 | "ionice": [TPID_l.ioclass, TPID_l.ionice], 778 | "oom_score_adj": TPID_l.oom_score_adj, 779 | "cmdline": TPID_l.cmdline, 780 | } 781 | except FileNotFoundError: 782 | continue 783 | 784 | pprint.pprint(proc_dict) 785 | 786 | def dump_autogroup(self): 787 | self.proc_map_update() 788 | proc_autogroup = {} 789 | for tpid in self.proc: 790 | try: 791 | TPID_l = self.proc[tpid] 792 | group_num = TPID_l.autogroup["group"] 793 | proc_autogroup[group_num] = { 794 | "nice": TPID_l.autogroup["nice"], 795 | "proc": {} 796 | } 797 | except FileNotFoundError: 798 | continue 799 | 800 | for tpid in self.proc: 801 | try: 802 | TPID_l = self.proc[tpid] 803 | group_num = TPID_l.autogroup["group"] 804 | proc_autogroup[group_num]["proc"][tpid] = { 805 | "pid": TPID_l.pid, 806 | "tpid": TPID_l.tpid, 807 | "exe": TPID_l.exe, 808 | "cmd": TPID_l.cmd, 809 | "stat": TPID_l.stat, 810 | "stat_name": TPID_l.stat_name, 811 | "nice": TPID_l.nice, 812 | "sched": TPID_l.sched, 813 | "ionice": [TPID_l.ioclass, TPID_l.ionice], 814 | "oom_score_adj": TPID_l.oom_score_adj, 815 | "cmdline": TPID_l.cmdline, 816 | } 817 | except FileNotFoundError: 818 | continue 819 | 820 | print(json.dumps(proc_autogroup, indent=4), flush=True) 821 | 822 | 823 | def help(): 824 | print( 825 | "Usage: ananicy [options]\n", 826 | " start Run script\n", 827 | " dump rules Generate and print rules cache to stdout\n", 828 | " dump types Generate and print types cache to stdout\n", 829 | " dump cgroups Generate and print cgroups cache to stdout\n", 830 | " dump proc Generate and print proc map cache to stdout\n", 831 | " dump autogroup Generate and print autogroup tree", 832 | flush=True) 833 | exit(0) 834 | 835 | 836 | def main(argv): 837 | 838 | if len(argv) < 2: 839 | help() 840 | 841 | os.environ["LANG"] = "" 842 | os.environ["LANGUAGE"] = "" 843 | 844 | try: 845 | if argv[1] == "start": 846 | daemon = Ananicy() 847 | daemon.run() 848 | 849 | if argv[1] == "dump": 850 | daemon = Ananicy(daemon=False) 851 | if len(argv) < 3: 852 | help() 853 | if argv[2] == "rules": 854 | daemon.dump_rules() 855 | if argv[2] == "types": 856 | daemon.dump_types() 857 | if argv[2] == "cgroups": 858 | daemon.dump_cgroups() 859 | if argv[2] == "proc": 860 | daemon.dump_proc() 861 | if argv[2] == "autogroup": 862 | daemon.dump_autogroup() 863 | except PermissionError as e: 864 | print("You are root?: {}".format(e)) 865 | 866 | 867 | if __name__ == '__main__': 868 | main(sys.argv) 869 | -------------------------------------------------------------------------------- /ananicy.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Ananicy - ANother Auto NICe daemon 3 | After=local-fs.target 4 | 5 | [Service] 6 | Type=notify 7 | ExecStartPre=/sbin/sysctl -e kernel.sched_autogroup_enabled=0 8 | ExecStart=/usr/bin/ananicy start 9 | ExecStopPost=/sbin/sysctl -e kernel.sched_autogroup_enabled=1 10 | Nice=19 11 | SuccessExitStatus=143 12 | OOMScoreAdjust=-999 13 | Restart=always 14 | CPUAccounting=true 15 | MemoryHigh=16M 16 | MemoryMax=64M 17 | ProtectSystem=true 18 | ProtectHome=true 19 | PrivateTmp=yes 20 | 21 | [Install] 22 | WantedBy=local-fs.target 23 | -------------------------------------------------------------------------------- /disabled-rules/DEs-and-WMs/_kde.rules: -------------------------------------------------------------------------------- 1 | ################################################################################S 2 | # https://community.kde.org/Baloo 3 | # Baloo is the file indexing and file search framework for KDE. 4 | { "name": "baloo_file", "type": "BG_CPUIO" } 5 | 6 | { "name": "krunner", "type": "DEWM" } 7 | { "name": "kwin_x11", "type": "DEWM" } 8 | { "name": "plasmashell", "nice": -1 } 9 | 10 | # Sharing information between devices: https://kdeconnect.kde.org/ 11 | { "name": "kdeconnectd", "type": "BG_CPUIO" } 12 | { "name": "kdeconnect-indicator", "type": "BG_CPUIO" } 13 | 14 | -------------------------------------------------------------------------------- /disabled-rules/audacity.rules: -------------------------------------------------------------------------------- 1 | # Sound editor: http://www.audacityteam.org/ 2 | { "name": "audacity", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/bees.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/Zygo/bees 2 | { "name": "bees", "type": "BG_CPUIO", "oom_score_adj": 1000 } 3 | -------------------------------------------------------------------------------- /disabled-rules/bitwig-studio.rules: -------------------------------------------------------------------------------- 1 | # Digital Audio Workstation: https://www.bitwig.com/en/bitwig-studio.html 2 | { "name": "bitwig-studio", "type": "LowLatency_RT" } 3 | { "name": "BitwigStudioEngine", "type": "LowLatency_RT" } 4 | -------------------------------------------------------------------------------- /disabled-rules/blender.rules: -------------------------------------------------------------------------------- 1 | # A fully integrated 3D graphics creation suite: https://www.blender.org/ 2 | { "name": "blender", "type": "LowLatency_RT", "nice": -10, "ioclass": "realtime" } 3 | -------------------------------------------------------------------------------- /disabled-rules/display-link-manager.rules: -------------------------------------------------------------------------------- 1 | # DisplayLink multi-monitor dock driver: https://github.com/DisplayLink/evdi 2 | 3 | { "name": "DisplayLinkManager", "type": "LowLatency_RT" } 4 | -------------------------------------------------------------------------------- /disabled-rules/ffmpeg.rules: -------------------------------------------------------------------------------- 1 | # ffmpeg - audio and video converter: https://www.ffmpeg.org/ 2 | { "name": "ffmpeg", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/fluxbox.rules: -------------------------------------------------------------------------------- 1 | # http://fluxbox.org/ 2 | { "name": "fluxbox", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/linphone.rules: -------------------------------------------------------------------------------- 1 | # rule for linphone, a SIP client. http://www.linphone.org/technical-corner/linphone/overview 2 | { "name" : "linphon", "type" : "LowLatency_RT", "nice" : -15, "ioclass" : "realtime" } 3 | -------------------------------------------------------------------------------- /disabled-rules/mixxx.rules: -------------------------------------------------------------------------------- 1 | # A digital DJ interface: http://www.mixxx.org/ 2 | { "name": "mixxx", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/parsec.rules: -------------------------------------------------------------------------------- 1 | # Parsec: https://parsecgaming.com/ 2 | { "name": "parsecd", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/remote-viewer.rules: -------------------------------------------------------------------------------- 1 | # A rule for the simple desktop client for SPICE and VNC servers. 2 | # Supposedly used to control virtual machines. 3 | { "name": "remote-viewer", "type": "LowLatency_RT" } 4 | -------------------------------------------------------------------------------- /disabled-rules/rstudio.rules: -------------------------------------------------------------------------------- 1 | # rstudio itself 2 | { "name": "rstudio", "type": "LowLatency_RT" } 3 | # its rsession 4 | { "name": "rsession", "type": "BG_CPUIO" } 5 | -------------------------------------------------------------------------------- /disabled-rules/samba.rules: -------------------------------------------------------------------------------- 1 | { "name": "smbd", "type": "LowLatency_RT" } 2 | -------------------------------------------------------------------------------- /disabled-rules/spectrwm.rules: -------------------------------------------------------------------------------- 1 | # https://github.com/conformal/spectrwm 2 | { "name": "spectrwm", "type": "LowLatency_RT" } 3 | -------------------------------------------------------------------------------- /disabled-rules/thrash-protect.rules: -------------------------------------------------------------------------------- 1 | # Userspace thrash protector: https://github.com/tobixen/thrash-protect 2 | { "name": "thrash-protect", "nice": -12, "ioclass": "realtime" } 3 | -------------------------------------------------------------------------------- /disabled-rules/wineserver.rules: -------------------------------------------------------------------------------- 1 | # Reschedule Wineserver for better performance 2 | # https://wiki.archlinux.org/index.php/Gaming#Optimus.2C_and_other_helping_programs 3 | 4 | { "name": "wineserver", "nice": 19, "sched": "fifo" } 5 | -------------------------------------------------------------------------------- /package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | ################################################################################ 3 | # echo wrappers 4 | INFO(){ echo "INFO: $*";} 5 | WARN(){ echo "WARN: $*";} 6 | ERRO(){ echo "ERRO: $*"; exit 1;} 7 | 8 | debian_package(){ 9 | cd "$(dirname "$0")" 10 | VERSION=$(git tag --sort version:refname | tail -n 1) 11 | [ -z "$VERSION" ] && ERRO "Can't get git tag, VERSION are empty!" 12 | DEB_NAME="ananicy-${VERSION}_any" 13 | 14 | # cleanup after previous installation 15 | rm "./${DEB_NAME}.deb" && rm -rf "${DEB_NAME}" 16 | 17 | mkdir -p "${DEB_NAME}" 18 | make install PREFIX="${DEB_NAME}" 19 | mkdir -p "${DEB_NAME}/DEBIAN/" 20 | { 21 | echo "Package: ananicy" 22 | echo "Version: $VERSION" 23 | echo "Section: custom" 24 | echo "Priority: optional" 25 | echo "Architecture: all" 26 | echo "Depends: coreutils, schedtool" 27 | echo "Essential: no" 28 | echo "Installed-Size: 16" 29 | echo "Maintainer: nefelim4ag@gmail.com" 30 | echo "Description: Ananicy (ANother Auto NICe daemon) — is a shell daemon created to manage processes' IO and CPU priorities, with community-driven set of rules for popular applications (anyone may add his own rule via github's pull request mechanism)." 31 | } > "${DEB_NAME}/DEBIAN/control" 32 | 33 | POSTINST="${DEB_NAME}/DEBIAN/postinst" 34 | touch "${POSTINST}" && chmod +x "${POSTINST}" 35 | { 36 | echo "#!/bin/sh" 37 | echo "chown -R root:root /etc/ananicy.d" 38 | echo "chown root:root /lib/systemd/system/ananicy.service" 39 | echo "chown root:root /usr/bin/ananicy" 40 | } > "${POSTINST}" 41 | dpkg-deb --build "${DEB_NAME}" 42 | } 43 | 44 | archlinux_package(){ 45 | INFO "Use yaourt -S ananicy-git" 46 | } 47 | 48 | case $1 in 49 | debian) debian_package ;; 50 | archlinux) archlinux_package ;; 51 | *) echo "$0 " ;; 52 | esac 53 | --------------------------------------------------------------------------------